Moin,
ich stehe bereits vor meinem ersten nicht lösbaren Problem.
Ausgangssituation (funktional)
/* ListActivity Subclass, relevante Codezeilen */
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
/* Tell superclass to do it's initialization stuff */
super.onCreate(savedInstanceState);
/* Take the item list view as content view for this list activity */
setContentView(R.layout.itemview);
registerForContextMenu(getListView());
reloadData();
}
/** Context menu to delete an item */
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, EDIT_LIST_ITEM_ID, 0, R.string.edit_item);
menu.add(0, DELETE_LIST_ITEM_ID, 0, R.string.delete_item);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case EDIT_LIST_ITEM_ID:
return true;
case DELETE_LIST_ITEM_ID:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
dbHelper.deleteItem(info.id);
reloadData();
return true;
default:
return super.onContextItemSelected(item);
}
}
public void reloadData() {
Cursor dataCursor = dbHelper.fetchItems();
startManagingCursor(dataCursor);
String[] databaseValues = new String[] { ShoppingListDatabaseHelper.ITEM_KEY_NAME };
int[] views = new int[] { R.id.item_name };
SimpleCursorAdapter itemsCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_row, dataCursor, databaseValues, views);
setListAdapter(itemsCursorAdapter);
}
Alles anzeigen
<!-- itemview.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" >
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
<TextView android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/no_items_stored"/>
</LinearLayout>
Alles anzeigen
<!-- item_row.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="horizontal" >
<TextView android:id="@+id/item_name"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Item Name" />
</LinearLayout>
Alles anzeigen
So weit, so gut, alles läuft.
Sprich: ich halte etwas länger auf einem Eintrag gedrückt und bekomme 'Modify Item' und 'Delete Item' als Kontextmenü angezeigt.
Jetzt möchte ich allerdings die Funktionalität übernehmen, auf Knopfdruck den Datensatz aus dieser Liste in eine andere Tabelle zu übernehmen.
Dafür dachte ich zunächst an einen ToggleButton. Einzige Änderung ist dann im
<!-- item_row.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="horizontal" >
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ToggleButton" />
<TextView android:id="@+id/item_name"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Item Name" />
</LinearLayout>
Alles anzeigen
Sieht auch total gut aus, ich kann da auf dem Button rumdrücken (natürlich erst einmal ohne das etwas passiert, aber dazu später), doch:
mein Kontextmenü erscheint nicht mehr.
Dass ein Button einen Klick abfängt und weiterleitet ist mir bewusst und durchaus so gewollt. Aber leider bekomme ich offenbar auch keinen Klick auf das Textfeld registriert.
Welche Möglichkeiten habe ich, sowohl ein bedienbares Element wie einen Toggle Button als auch das Kontextmenü in meine ListView einzubinden?