ContextMenü mit ListView verbinden und Daten übergeben.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ContextMenü mit ListView verbinden und Daten übergeben.

    Hier zeuge ich euch folgendes
    - Daten aus einer SQLite-Datenbank in eine ListView laden.
    - ContextMenü erstellen und mit der ListView verbinden
    - ID aus Datenbank des selektierten Eintrages in der ListView an das Contextmenü übergeben.

    [size=large]fahrzeuge.java[/size]
    Daten aus der Datenbank in eine ListView laden.
    ContextMenü mit ListView verbinden.


    Java-Quellcode

    1. final static String MY_DB_NAME = "TankPro2";
    2. final static String MY_DB_TABLE = "fahrzeuge";
    3. final static String tag="ensacom";
    4. private static final int COLUMN_INDEX_TITLE = 1; //Titel des Contextmenüs
    5. public static final int EDIT_ID = Menu.FIRST;
    6. public static final int DELETE_ID = Menu.FIRST + 1;
    7. public static final int TANKEN_ID = Menu.FIRST + 2;
    8. public void onCreate(Bundle savedInstanceState) {
    9. super.onCreate(savedInstanceState);
    10. SQLiteDatabase myDB = null;
    11. try{
    12. myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
    13. Cursor c = myDB.rawQuery("SELECT _id, name || ', ' || model as bezeichnung,
    14. tankinhalt FROM " +
    15. MY_DB_TABLE, null);
    16. startManagingCursor(c);
    17. getListView().setOnCreateContextMenuListener(this);
    18. final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
    19. R.layout.fahrzeuge,
    20. c,
    21. new String[] { "_id" },
    22. new int[] { R.id.KfzNameModel });
    23. adapter.setViewBinder(new ViewBinder()
    24. {
    25. @Override
    26. public boolean setViewValue(View view, Cursor theCursor, int column)
    27. {
    28. final String ColNameModel = theCursor.getString(1); //Name und Model
    29. ((TextView)view).setText(ColNameModel);
    30. return true;
    31. }
    32. });
    33. this.setListAdapter(adapter);
    34. } finally {
    35. if (myDB != null)
    36. myDB.close();
    37. }
    38. }
    Alles anzeigen



    ContextMenü erstellen und den Cursor auf die AdapterView der ListView setzen um an die ID des selektierten Eintrages zu gelangen.

    Java-Quellcode

    1. @Override
    2. public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    3. AdapterView.AdapterContextMenuInfo info;
    4. try {
    5. info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    6. } catch (ClassCastException e) {
    7. Log.e(TankPro2.tag, "bad menuInfo", e);
    8. return;
    9. }
    10. Cursor cursor = (Cursor) getListAdapter().getItem(info.position);
    11. if (cursor == null) {
    12. // For some reason the requested item isn't available, do nothing
    13. return;
    14. }
    15. menu.setHeaderTitle(cursor.getString(COLUMN_INDEX_TITLE));
    16. menu.add(0, EDIT_ID, 0, R.string.cmEdit);
    17. menu.add(0, DELETE_ID, 0, R.string.cmDelete);
    18. menu.add(0, TANKEN_ID, 0, R.string.cmTanken);
    19. }
    Alles anzeigen



    Aktion beim anklicken eines Menüpunktes im Contextmenü

    Java-Quellcode

    1. public boolean onContextItemSelected(MenuItem item) {
    2. AdapterView.AdapterContextMenuInfo info;
    3. try {
    4. info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    5. } catch (ClassCastException e) {
    6. Log.e(TankPro2.tag, "bad menuInfo", e);
    7. return false;
    8. }
    9. switch (item.getItemId()) {
    10. case EDIT_ID:
    11. Log.v(TankPro2.tag, "Edit KFZ with id: "+""+info.id);
    12. return true;
    13. case DELETE_ID:
    14. Log.v(TankPro2.tag, "Delete KFZ with id: "+""+info.id);
    15. return true;
    16. case TANKEN_ID:
    17. Log.v(TankPro2.tag, "fuel KFZ with id: "+""+info.id);
    18. default:
    19. return super.onContextItemSelected(item);
    20. }
    21. }
    Alles anzeigen


    [size=large]res/layout/fahrzeuge.xml[/size]

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent">
    6. <TextView
    7. android:id="@+id/KfzNameModel"
    8. android:layout_width="fill_parent"
    9. android:layout_height="wrap_content"
    10. android:padding="10px"
    11. android:textStyle="bold" android:textSize="24px">
    12. </TextView>
    13. </LinearLayout>
    Alles anzeigen



    [size=large]res/values/strings.xml[/size]

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <resources>
    3. <string name="hello">Hello World, ensacom1!</string>
    4. <string name="app_name">Tank-Pro</string>
    5. <!-- ContextMenüs -->
    6. <string name="cmEdit">Bearbeiten</string>
    7. <string name="cmDelete">Löschen</string>
    8. <string name="cmTanken">Tanken</string>
    9. </resources>
    Alles anzeigen



    [size=large]Hier ein paar Screenshots.[/size]
    Startbildschirm mit 3 gespeicherten Fahrzeugen

    [attachment=20]

    ContextMenü auf dem der Audi TT gewählt wurde und der ContextMenüPunkt Löschen angeklickt wird.

    [attachment=21]

    Startbildschirm nachdem der Audi TT gelöscht wurde.

    [attachment=22]


    Beim anklicken eines Menüpunktes im Contextmenü wird ein Eintrag in das LogFile erstellt der zeigt welcher Button angeklickt und wie die ID des in der ListView gewählten Eintrages war. Bei der ID handelt es sich nicht um die ID des ListVieweintrages selber sondern um die ID des Datensatzes des gewählten Eintrages aus der Datenbank.

    Über den Dalvik Debug Monitor können Sie die Ausgaben sehen.
    In diesem Beispiel habe ich als Ausgabe folgendes erhalten
    KFZ with id: 11 deletet
    Bilder
    • tankpro1_1.png

      11,54 kB, 320×480, 851 mal angesehen
    • tankpro1_2.png

      15,41 kB, 320×480, 856 mal angesehen
    • tankpro1_3.png

      10,8 kB, 320×480, 714 mal angesehen
    HTC-Magic white
    Development: Eclipse Ganymede + Android SDK 1.5
    Linux Mint 6