Ich habe eine Listenansicht, die mit einer Datenbank verbunden ist und alle Einträge anzeigt. Ich möchte, dass ein Menü angezeigt wird, wenn der Benutzer lange auf ein Element in der Listenansicht (Datenbankeintrag) klickt und Optionen zum Bearbeiten oder Löschen des Eintrags anzeigt. Wie kann ich das machen.
Bis jetzt habe ich versucht, einen onItemLongClick-Listener und einen Toast darin zu verwenden, der die ID der Ansicht anzeigt, auf die lange geklickt wurde.
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
String res = Long.toString(id);
Toast toast = Toast.makeText(this, res, Toast.LENGTH_SHORT);
toast.show();
return true;
}
quelle
Zuerst müssen Sie Ihr Kontextmenü in der Listenansicht registrieren.
lv = (ListView) findViewById(R.id.list_view); registerForContextMenu(lv);
Überschreiben Sie dann einfach die Aktivitätsmethoden.
/** * MENU */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); if (v.getId()==R.id.list_view) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_list, menu); } } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch(item.getItemId()) { case R.id.add: // add stuff here return true; case R.id.edit: // edit stuff here return true; case R.id.delete: // remove stuff here return true; default: return super.onContextItemSelected(item); } }
Hier ist ein Beispiel für die Datei menu_list.xml (Sie müssen die Datei im Ordner res / menu ablegen).
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add" android:icon="@android:drawable/ic_menu_add" android:title="@string/menu_add" /> <item android:id="@+id/edit" android:icon="@android:drawable/ic_menu_edit" android:title="@string/menu_edit" /> <item android:id="@+id/delete" android:icon="@android:drawable/my_icon_delete" android:title="@string/menu_delete" /> </menu>
Hoffe es wird helfen.
quelle
((AdapterView.AdapterContextMenuInfo)menuInfo).id
((AdapterView.AdapterContextMenuInfo)menuInfo).position
Ein anderer Ansatz:
//Deleted individual cart items //on list view cell long press cartItemList.setOnItemLongClickListener (new OnItemLongClickListener() { @SuppressWarnings("rawtypes") public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { final CharSequence[] items = { "Delete" }; AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Action:"); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { cart = cartList.get(position); db.removeProductFromCart(context, cart); new AlertDialog.Builder(context) .setTitle(getString(R.string.success)) .setMessage(getString(R.string.item_removed)) .setPositiveButton("Done", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(CartDetailsActivity.this, HomeScreen.class); startActivity(intent); } }) .show(); } }); AlertDialog alert = builder.create(); alert.show(); //do your stuff here return false; } });
quelle
Sie können
Activity.openOptionsMenu()
Ihre Klickelementmethode aufrufenÜberprüfen Sie hier
http://developer.android.com/reference/android/app/Activity.html#openOptionsMenu%28%29
quelle
** **.
** überschreibe die onCreateContextMenu-Methode wie folgt
@Override public void onCreateContextMenu(ContextMenu menu,View v, ContextMenu.ContextMenuInfo menuInfo){ if (v.getId() == R.id.listView){ AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo)menuInfo; MenuItem mnu1=menu.add(0,0,0,"Delete"); MenuItem mnu2=menu.add(0,1,1,"Share"); } }
dann Codierung für jedes Element, das ausgewählt werden kann
@Override public boolean onContextItemSelected(MenuItem menuItem){ AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo)menuItem.getMenuInfo(); switch (menuItem.getItemId()) { case 0: Toast.makeText(this, "Delete Selected", Toast.LENGTH_LONG).show(); break; case 1: Toast.makeText(this, "Share Selected", Toast.LENGTH_LONG).show(); break; default: break; } return true; }
quelle
Verwenden Sie registerForContextMenu (); um das Kontextmenü mit einem beliebigen View-Nachfolger zu verknüpfen.
Verwenden Sie einfach die AdapterView.AdapterContextMenuInfo, um auf ausgewählte ListItem-Daten zuzugreifen. Z.B:
@Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo menuinfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); long selectid = menuinfo.id; //_id from database in this case int selectpos = menuinfo.position; //position in the adapter switch (item.getItemId()) { case 1: doSomething(selectid); break; case 2: doSomethingElse(selectpos); } return super.onContextItemSelected(item); }
quelle
Ein kurzer Hinweis für diejenigen, die immer noch Probleme haben: Es gibt zwei Methoden
registerForContextMenu(list); unregisterForContextMenu(list);
Stellen Sie sicher, dass Sie die erste auswählen.
quelle