2011-05-14 81 views
7

我有一个微调器,其中strings.xml中有少量值,我想从编辑文本中使用Button的onclick事件动态填充微调器,但不知何故,它不工作,我越来越每次强制关闭。任何帮助将不胜感激。从编辑文本动态在Android中填充微调器

package com.example.expense; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 

public class Expense3 extends Activity { 
    //private TextView t1; 

    private Spinner spinner; 
    private EditText Text; 
    private ArrayAdapter<CharSequence> adapter; 
    private Button addButton; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Text = (EditText)findViewById(R.id.widget4); 
     addButton = (Button)findViewById(R.id.add_new); 

     spinner = (Spinner) findViewById(R.id.hhj); 

     adapter = ArrayAdapter.createFromResource(
       this, R.array.planets_array, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 





     this.addButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

       addNewSpinnerItem(); 
     } 

      }); 

     } 

    protected void addNewSpinnerItem() { 
     // TODO Auto-generated method stub 
     CharSequence textHolder = "" + Text.getText().toString(); 
     adapter.add(textHolder); 


    } 
} 

logcat的错误: -

05-14 01:07:19.934: ERROR/AndroidRuntime(802): FATAL EXCEPTION: main 
05-14 01:07:19.934: ERROR/AndroidRuntime(802): java.lang.UnsupportedOperationException 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at java.util.AbstractList.add(AbstractList.java:411) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at java.util.AbstractList.add(AbstractList.java:432) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.widget.ArrayAdapter.add(ArrayAdapter.java:178) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at com.example.expense.Expense3.addNewSpinnerItem(Expense3.java:50) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at com.example.expense.Expense3$1.onClick(Expense3.java:40) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.view.View.performClick(View.java:2408) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.view.View$PerformClick.run(View.java:8816) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.os.Handler.handleCallback(Handler.java:587) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.os.Looper.loop(Looper.java:123) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at dalvik.system.NativeStart.main(Native Method) 
+0

发布您的logcat以显示什么导致的力量关闭。 – Squonk 2011-05-14 01:46:11

+0

@MisterSquonk我编辑了这个问题,通过添加Logcat错误..! – ferhan 2011-05-14 01:50:54

+0

对不起,我无法弄清楚问题所在。也许尝试将适配器更改为ArrayAdapter ,并且还将addNewSpinnerItem()方法中的textHolder也设置为String。 – Squonk 2011-05-14 02:24:46

回答

12

您试图在从资源创建的,因此会给适配器添加项目您导致不受支持。要解决此问题,您可以创建一个空白列表,然后从资源中添加列表中的项目。为此,您可以使用Arrays.asList()或者您可以创建一个循环并在列表中添加单个项目,创建列表后,您必须使用该列表创建适配器。

现在要在微调控制器的适配器中添加项目,您可以使用adapter.add()方法在微调控制器适配器内添加项目。 下面是一个例子,解释了如何创建一个适配器并在微调器中添加项目。

adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_spinner_item, array); 

这里的数组是一个列表。

而对于微调器中的添加项目,您可以使用add方法。

adapter.add("String to insert into spinner"); 
+1

感谢它的工作..! :) – ferhan 2011-05-15 03:16:36

7

的问题是,ArrayAdapter.createFromResource()使用Arrays.asList()返回一个不可变的列表,这意味着你可以不加任何产品的适配器(这是“不支持”操作)。尝试创建一个空的适配器和刚才添加的项目是:

adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, 
       new ArrayList<CharSequence>()); 
2

是的,他们说什么。

package com.stackoverflow.q5999262; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 

public class Main extends Activity 
{ 
    private Spinner spinner; 
    private EditText Text; 
    private ArrayAdapter<String> adapter; 
    private Button addButton; 

    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Text = (EditText) findViewById(R.id.widget4); 
    List<String> planets = new ArrayList<String>(Arrays.asList(getResources().getStringArray(R.array.planets_array))); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, planets); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner = (Spinner) findViewById(R.id.hhj); 
    spinner.setAdapter(adapter); 
    addButton = (Button) findViewById(R.id.add_new); 
    addButton.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 
     addNewSpinnerItem(); 
     } 
    }); 
    } 

    protected void addNewSpinnerItem() 
    { 
    String textHolder = "" + Text.getText().toString(); 
    adapter.add(textHolder); 
    } 
}