2011-05-13 102 views
5

He desarrollado una aplicación en la que tengo un valor de texto de edición de texto de edición se ingresa en el botón giratorio y el elemento que selecciono para eliminar se elimina pero el problema es que cuando elimino el último elemento de spinner lista completa de spinner se vacía. quiero eliminar el elemento seleccionado solamente (sólo último elemento)Spinner borrar elementos

Mi código es el siguiente:

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

    /////////////////////////////////////////////////////////////// 
    // grab our UI elements so we can manipulate them (in the case of the 
    // Spinner) 
    // or add listeners to them (in the case of the buttons) 
    m_myDynamicSpinner = (Spinner) findViewById(R.id.dynamicSpinner); 
    m_addItemText = (EditText) findViewById(R.id.newSpinnerItemText); 
    Button addButton = (Button) findViewById(R.id.AddBtn); 
    Button clearButton = (Button) findViewById(R.id.ClearBtn); 

    // ////////////////////////////////////////////////////////////// 
    // create an arrayAdapter an assign it to the spinner 
    m_adapterForSpinner = new ArrayAdapter(this, 
      android.R.layout.simple_spinner_item); 
    ((ArrayAdapter) m_adapterForSpinner) 
      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    m_myDynamicSpinner.setAdapter(m_adapterForSpinner); 
    // m_adapterForSpinner.add("dummy item"); 

    // ////////////////////////////////////////////////////////////// 
    // add listener for addButton 
    addButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      addNewSpinnerItem(); 
     } 
    }); 

    clearButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      clearSpinnerItems(); 
     } 
    }); 
} 

// ////////////////////////////////////////////////////////////// 
// add listener for addButton 
private void addNewSpinnerItem() { 
    Log.v("TAG", "addNewSpinnerItems called"); 

    if (m_addItemText.getText().length() == 0) {// ||(m_addItemText.getText().toString()== 
     // " ")){ 
     Log.v("In if cndtn", "textHolder is of length 0"); 
     Toast.makeText(getApplicationContext(), "The textView is empty", 
       Toast.LENGTH_LONG).show(); 
     //m_myDynamicSpinner.clearFocus(); 
     //m_myDynamicSpinner.setFocusable(false); 
     //m_addItemText.setFocusable(true); 
    } else { 
     CharSequence textHolder = "" + m_addItemText.getText(); 
     // else{ 
     Log.v("else", textHolder + ""); 
     // m_adapterForSpinner.add(textHolder); 
     // } 
     ((ArrayAdapter) m_adapterForSpinner).add(textHolder); 
    } 
    m_addItemText.setText(""); 
} 

private void clearSpinnerItems() { 
    // m_adapterForSpinner.clear(); 
    Log.v("TAG", "clearSpinnerItems called"); 
    m_myDynamicSpinner 
      .setOnItemSelectedListener(new OnItemSelectedListener() { 

       @Override 
       public void onItemSelected(AdapterView<?> parent, 
         View view, int pos, long id) { 
        // TODO Auto-generated method stub 
        Log.v("TAG", "Itemseleted to be removed is " 
          + m_adapterForSpinner.getItem(pos).toString()); 
        Log.v("Position of item", pos + ""); 
        Object t = m_adapterForSpinner.getItem(pos); 
        Log.v("Object t ", (String) t); 

        ((ArrayAdapter) m_adapterForSpinner).remove((CharSequence) t); 
        Log.v("Item removed", t + ""); 

        // m_myDynamicSpinner.setSelected(false); 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> arg0) { 
        // TODO Auto-generated method stub 

       } 
      }); 
    // m_adapterForSpinner.add("dummy item"); 
} 
+0

@Shruthi Si hace clic en el botón Eliminar, se debe eliminar el valor seleccionado, pero ahora todos los valores se eliminan ¿Correcto? – Venky

Respuesta

7

para eliminar todos los elementos utilizan:

mySpinner.setAdapter(null); 

si desea eliminar un artículo en particular , elimine esto de m_adapterForSpinner y luego:

mySpinner.setAdapter(m_adapterForSpinner); 
+11

En mi caso, mySpinner.setAdapter (null); arroja una excepción! –

+0

@thenosic al configurar el adaptador como nulo eliminará la conexión entre la ruleta y el adaptador, de hecho, estamos tratando de eliminar solo los elementos del adaptador – SoliQuiD

-2

Tuve el mismo problema. Hacer esto hizo resolver el problema, al vaciar la ruleta:

mySpinner.setSelection(Adapter.NO_SELECTION); 
0

Recuerde: métodos de "eliminar" y "claro" no funcionan con Android 2.3.3 ArrayAdapter por e inferior. Recibirá el mensaje de error "Operación no admitida ... bla bla bla". Puede ser que funcionen con Android 4.0 y superior, no sé. Aquí está mi solución que funciona incluso con minSdkVersion = "5".

  1. Crear Spinner y llenarlo con los datos de prueba Este es el código de un formulario de actividad. Utilice ArrayList como origen de datos para ArrayAdapter en lugar de array. Es importante porque va a utilizar su método de "eliminar" más adelante

    List<String> reportFiles = new ArrayList<String>();   
    //fill some test data  
    reportFiles.add("aaaaaaaaaaaaa"); 
    reportFiles.add("bbbbbbbbbbbbb"); 
    reportFiles.add("ccccccccccccc"); 
    
    //create spinner from corresponding layout xml file 
    Spinner spnReport = (Spinner) findViewById(R.id.spinner_report); 
    
    //create ArrayAdapter 
    ArrayAdapter reportAdapter = new ArrayAdapter(this, 
         android.R.layout.simple_spinner_dropdown_item, reportFiles); 
    
    //set adapter to spinner 
    spnReport.setAdapter(reportAdapter); 
    
    //select first item in adapter - is not obligatory 
    spnReport.setSelection(0); 
    
  2. Quitar elemento seleccionado de Spinner

    reportFiles.remove((String)spnReport.getSelectedItem());

    //create new ArrayAdapter with modified ArrayList reportAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,reportFiles);

    //set new array adapter to spinner spnReport.setAdapter(reportAdapter);

    //select first item spnReport.setSelection(0);

0

Para mí la respuesta aceptada arrojó una excepción así que lo que hice fue esto.

ArrayAdapter adapter = new ArrayAdapter<>(getActivity(), 
android.R.layout.simple_spinner_item, Collections.emptyList()); 
spinner.setAdapter(adapter); 
Cuestiones relacionadas