Using contextmenu with listview in android
you should register the LISTVIEW
for the context menu.
Here's the source.
for onCreate()
:
registerForContextMenu(lv);
And to access the selected item during long click:
@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { if (v.getId() == R.id.lv) { ListView lv = (ListView) v; AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo; YourObject obj = (YourObject) lv.getItemAtPosition(acmi.position); menu.add("One"); menu.add("Two"); menu.add("Three"); menu.add(obj.name); }}
To get the item from the ListView item selected refer to ContextMenuInfo object (see last implemented method below). Full solution as follows:
1) register ListView for context menu in ListActivity class
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... getListView().setAdapter(mAdapter); registerForContextMenu(getListView());}
1a) if you have complex View on your list you might need to enable long click on each list view in Adapter class
@Overridepublic View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { RelativeLayout layout = (RelativeLayout) LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false); itemLayout = layout; itemLayout.setLongClickable(true); } // ... return view;}
2) implement onCreateContextMenu() and onContextItemSelected() in ListActivity class
@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; String title = ((MyItem) mAdapter.getItem(info.position)).getTitle(); menu.setHeaderTitle(title); menu.add(Menu.NONE, MENU_CONTEXT_DELETE_ID, Menu.NONE, DELETE_TEXT);}@Overridepublic boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_CONTEXT_DELETE_ID: AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); Log.d(TAG, "removing item pos=" + info.position); mAdapter.remove(info.position); return true; default: return super.onContextItemSelected(item); }}
1) First we use
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add("View Selected Text");}
2)list--is ref if ListView
registerForContextMenu(list);
3)
@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); if(item.getTitle().equals("View Selected Text")) { AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); Contact c=array.get(menuInfo.position); Toast.makeText(List.this, "Selected String is :-"+c.toString(), Toast.LENGTH_SHORT).show(); }}