Ich habe einen Spinner, der aus der Datenbank stammt:
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);
Und ich möchte AlertDialog
aufrufen, wenn ich das letzte Element auswähle (Add new category...
).
Nachdem ich eine neue Kategorie hinzugefügt habe, möchte ich das Item (Add new category...
) "war das letzte mal.
Wie kann ich das machen?
Sie SOLLTEN NICHT OnItemClickListener
auf einem Spinner aufrufen. Ein Spinner unterstützt keine Elementklickereignisse. Das Aufrufen dieser Methode löst eine Ausnahme aus. Aktivieren Sie this .
Sie können stattdessen OnItemSelectedListener
anwenden.
Bearbeiten:
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)
{
}
});
In Bezug auf das Hinzufügen von "Neue Kategorie hinzufügen" zum Ende der Liste sollten Sie sich besser für einen benutzerdefinierten Adapter entscheiden, bei dem Sie nach dem Hinzufügen aller Ihrer Elemente diese Konstante ("Neue Kategorie hinzufügen") zum Ende von hinzufügen können Array so, dass es immer zuletzt kommen sollte.
Hook to OnItemClickListener of Spinner. Überprüfen Sie dann, ob der ausgewählte Eintrag "Neue Kategorie hinzufügen" ist.
Wenn ja, zeigen Sie den Dialog zum Hinzufügen des neuen Elements an.
Beim Hinzufügen des neuen Elements
Dadurch wird der Eintrag "Neue Kategorie hinzufügen" zum letzten.
Codebeispiel:
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>
Aktivitätsklasse:
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);
}
}