2011-05-14 24 views
7

Tengo un spinner en el que hay pocos valores de strings.xml y quiero poblar ese spinner dinámicamente desde el texto de edición usando el evento onclick de Button pero de alguna manera no está funcionando y estoy obteniendo Fuerza Cerrar todo el tiempo. Cualquier ayuda será apreciada. errorPoblar Spinner dinámicamente en android desde editar texto

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

Publique su Logcat para mostrar lo que está causando el cierre de la fuerza. – Squonk

+0

@MisterSquonk He editado la pregunta agregando el error Logcat .. !! – ferhan

+0

Lo siento, no puedo entender cuál es el problema. Tal vez intente cambiar el adaptador a ArrayAdapter y también haga que textHolder en el método addNewSpinnerItem() también sea una Cadena. – Squonk

Respuesta

12

Usted está tratando de añadir el artículo en el adaptador que se crea a partir de recursos por lo que le dará el resultado sin apoyo. Para resolver este problema, puede crear una lista en blanco y luego agregar elementos en la lista de sus recursos. Para eso puede usar Arrays.asList() o puede hacer un ciclo y agregar elementos individuales en la Lista y luego de crear una Lista deberá crear un adaptador usando esa Lista.

Ahora, para agregar un elemento en el adaptador de la ruleta, puede usar el método adapter.add() para agregar un elemento dentro del adaptador de la ruleta. Aquí hay un ejemplo que explica cómo puede crear un adaptador y agregar un elemento en la ruleta.

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

Here array is an List.

Y para agregar el elemento en la ruleta puede usar el método de agregar.

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

gracias funcionó .. !! :) – ferhan

7

El problema es que ArrayAdapter.createFromResource() utiliza Arrays.asList() que devuelve una lista inmutable, lo que significa que no se puede añadir ningún producto para el adaptador (que es la operación "no soportado") Trate de crear un adaptador de vacío y sólo tiene que añadir los artículos a que:

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

Sí, lo que dijeron.

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); 
    } 
}
Cuestiones relacionadas