wake-up-neo.com

Setze onClickListener für Spinner Item?

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?

24

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.

78
Braj

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

  1. Entfernen Sie den letzten Eintrag "Neue Kategorie hinzufügen".
  2. Fügen Sie die neu eingegebene Kategorie hinzu.
  3. Fügen Sie dann den Eintrag "Neue Kategorie hinzufügen" erneut hinzu.

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

}
6
Eldhose M Babu