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.
final static String MY_DB_NAME = "TankPro2";
final static String MY_DB_TABLE = "fahrzeuge";
final static String tag="ensacom";
private static final int COLUMN_INDEX_TITLE = 1; //Titel des Contextmenüs
public static final int EDIT_ID = Menu.FIRST;
public static final int DELETE_ID = Menu.FIRST + 1;
public static final int TANKEN_ID = Menu.FIRST + 2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SQLiteDatabase myDB = null;
try{
myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
Cursor c = myDB.rawQuery("SELECT _id, name || ', ' || model as bezeichnung,
tankinhalt FROM " +
MY_DB_TABLE, null);
startManagingCursor(c);
getListView().setOnCreateContextMenuListener(this);
final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.fahrzeuge,
c,
new String[] { "_id" },
new int[] { R.id.KfzNameModel });
adapter.setViewBinder(new ViewBinder()
{
@Override
public boolean setViewValue(View view, Cursor theCursor, int column)
{
final String ColNameModel = theCursor.getString(1); //Name und Model
((TextView)view).setText(ColNameModel);
return true;
}
});
this.setListAdapter(adapter);
} finally {
if (myDB != null)
myDB.close();
}
}
Alles anzeigen
ContextMenü erstellen und den Cursor auf die AdapterView der ListView setzen um an die ID des selektierten Eintrages zu gelangen.
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
Log.e(TankPro2.tag, "bad menuInfo", e);
return;
}
Cursor cursor = (Cursor) getListAdapter().getItem(info.position);
if (cursor == null) {
// For some reason the requested item isn't available, do nothing
return;
}
menu.setHeaderTitle(cursor.getString(COLUMN_INDEX_TITLE));
menu.add(0, EDIT_ID, 0, R.string.cmEdit);
menu.add(0, DELETE_ID, 0, R.string.cmDelete);
menu.add(0, TANKEN_ID, 0, R.string.cmTanken);
}
Alles anzeigen
Aktion beim anklicken eines Menüpunktes im Contextmenü
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
} catch (ClassCastException e) {
Log.e(TankPro2.tag, "bad menuInfo", e);
return false;
}
switch (item.getItemId()) {
case EDIT_ID:
Log.v(TankPro2.tag, "Edit KFZ with id: "+""+info.id);
return true;
case DELETE_ID:
Log.v(TankPro2.tag, "Delete KFZ with id: "+""+info.id);
return true;
case TANKEN_ID:
Log.v(TankPro2.tag, "fuel KFZ with id: "+""+info.id);
default:
return super.onContextItemSelected(item);
}
}
Alles anzeigen
[size=large]res/layout/fahrzeuge.xml[/size]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/KfzNameModel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10px"
android:textStyle="bold" android:textSize="24px">
</TextView>
</LinearLayout>
Alles anzeigen
[size=large]res/values/strings.xml[/size]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, ensacom1!</string>
<string name="app_name">Tank-Pro</string>
<!-- ContextMenüs -->
<string name="cmEdit">Bearbeiten</string>
<string name="cmDelete">Löschen</string>
<string name="cmTanken">Tanken</string>
</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