J'ai spinner qui remplit la base de données:
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);
Et je veux appeler AlertDialog
lorsque je sélectionne le dernier élément (Add new category...
).
Après avoir ajouté une nouvelle catégorie, je veux que "l'élément (Add new category...
) "était à nouveau le dernier.
Comment puis-je faire ceci?
Vous NE DEVRIEZ PAS appeler OnItemClickListener
sur un spinner. Un Spinner ne prend pas en charge les événements de clic sur un élément. L'appel de cette méthode déclenche une exception. Vérifiez ceci .
Vous pouvez appliquer OnItemSelectedListener
à la place.
Modifier:
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 ce qui concerne l'ajout de "Ajouter une nouvelle catégorie" à la fin de la liste, je pense que vous devriez mieux opter pour un adaptateur personnalisé dans lequel, après avoir ajouté tous vos articles, vous pouvez ajouter cette constante ("Ajouter une nouvelle catégorie") à la fin de tableau afin qu'il vienne toujours en dernier.
Accrochez-vous à OnItemClickListener de Spinner. Vérifiez ensuite si l'élément sélectionné est "Ajouter une nouvelle catégorie".
Si oui, affichez la boîte de dialogue pour ajouter le nouvel élément.
Lors de l'ajout du nouvel élément,
Cela fera de l'élément "Ajouter une nouvelle catégorie" le dernier.
Échantillon de code:
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>
mise en page 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>
Classe d'activité:
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);
}
}