studio sobre programacion para herramientas desarrollo con avanzado aplicaciones android spinner listener

android - sobre - configurar onClickListener para el elemento spinner?



manual de programacion android (2)

Tengo spinner que se llena de la base de datos:

catSpinner = (Spinner) findViewById(R.id.spinner1); cursor = dataAdapter.getAllCategory(); startManagingCursor(cursor); String[] from = new String[] { DataAdapter.CATEGORY_COL_NAME }; int[] to = new int[] { android.R.id.text1 }; SimpleCursorAdapter catAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_dropdown_item, cursor, from,to, 0); catAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); catAdapter.notifyDataSetChanged(); catSpinner.setAdapter(catAdapter);

Y quiero llamar a AlertDialog cuando selecciono el último elemento ( Add new category... ).
Después de agregar una nueva categoría, quiero que ese "elemento ( Add new category... )" fuera el último nuevamente.
¿Como puedo hacer esto?


Enganche a OnItemClickListener de Spinner. A continuación, compruebe si el elemento seleccionado es "Agregar nueva categoría".

En caso afirmativo, muestre el cuadro de diálogo para agregar el nuevo elemento.

Al agregar el nuevo elemento,

  1. Eliminar el último elemento "Añadir nueva categoría".
  2. Añadir la nueva categoría introducida.
  3. A continuación, agregue de nuevo el elemento "Agregar nueva categoría".

Esto hará que el elemento "Agregar nueva categoría" sea el último.

Ejemplo de código:

layout main.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:weightSum="10" > <Spinner android:id="@+id/cmbNames" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>

layout spinner_item.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/tvName" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>

Clase de actividad:

public class MainActivity extends Activity { private static final String NAME = "name"; private static final String ADD_NEW_ITEM = "Add New Item"; private SimpleAdapter adapter; private Spinner cmbNames; private List<HashMap<String, String>> lstNames; private int counter; private OnItemSelectedListener itemSelectedListener = new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { HashMap<String, String> map = lstNames.get(arg2); String name = map.get(NAME); if (name.equalsIgnoreCase(ADD_NEW_ITEM)) { lstNames.remove(map); counter++; addNewName(String.valueOf(counter)); addNewName(ADD_NEW_ITEM); adapter.notifyDataSetChanged(); } } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); populateList(); cmbNames = (Spinner) findViewById(R.id.cmbNames); adapter = new SimpleAdapter(this, lstNames, R.layout.spinner_item, new String[] { NAME }, new int[] { R.id.tvName }); cmbNames.setAdapter(adapter); cmbNames.setOnItemSelectedListener(itemSelectedListener); } private void populateList() { lstNames = new ArrayList<HashMap<String, String>>(); addNewName("abc"); addNewName("pqr"); addNewName("xyz"); addNewName(ADD_NEW_ITEM); } private void addNewName(String name) { HashMap<String, String> map = new HashMap<String, String>(); map.put(NAME, name); lstNames.add(map); } }


NO DEBE llamar a OnItemClickListener para obtener una ruleta. Un Spinner no admite eventos de clic de elementos. Llamar a este método provocará una excepción. Mira this Puede aplicar OnItemSelectedListener en OnItemSelectedListener lugar.

Editar:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String selectedItem = parent.getItemAtPosition(position).toString(); if(selectedItem.equals("Add new category")) { // do your stuff } } // to close the onItemSelected public void onNothingSelected(AdapterView<?> parent) { } });

En lo que respecta a la adición de "Agregar nueva categoría" al final de la lista, creo que debería ir por un adaptador personalizado en el que después de agregar todos sus elementos, puede agregar esa constante (Agregar nueva categoría) al final de la matriz para que siempre debe ser lo último.