在列表视图上的长按事件之后创build一个菜单
我有一个列表视图连接到数据库,显示所有条目。 我想要一个菜单来显示,如果用户长按列表视图(数据库条目)中的项目,显示选项来编辑或删除条目。 我怎样才能做到这一点。
直到现在,我已经尝试使用onItemLongClick监听器,并在其中显示长时间点击视图的ID。
@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; }
而不是使用onItemLongClick
你可以使用
public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) { ... }
在那里你设置编辑和删除或任何你需要的选项。
从上下文菜单中select的项目的操作可以在中进行处理
public boolean onContextItemSelected(final MenuItem item)
有关上下文菜单的更多信息,请看这里 。
对于一步一步教程访问这里 。
首先,您需要在列表视图中注册您的上下文菜单。
lv = (ListView) findViewById(R.id.list_view); registerForContextMenu(lv);
然后,只需重写活动方法。
/** * 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); } }
这里是一个menu_list.xml文件的例子(你必须把文件放在res / menu文件夹中)。
<?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>
希望它会有所帮助。
另一种方法:
//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; } });
您可以在您的点击项目方法中调用Activity.openOptionsMenu()
在这里检查
http://developer.android.com/reference/android/app/Activity.html#openOptionsMenu%28%29
使用registerForContextMenu(); 将上下文菜单链接到任何View后继。
要访问选定的ListItem数据,只需使用AdapterView.AdapterContextMenuInfo。 例如:
@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); }
**
在列表视图中注册您的上下文菜单后
**重写onCreateContextMenu这样的方法
@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"); } }
然后编码每个可以select的项目
@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; }