Usar contextmenu con listview en android

Estoy desarrollando una aplicación para Android. Tendré una vista de lista y he configurado un menú contextual para que aparezca cuando un elemento de vista de lista está escrito en forma larga. Cómo obtengo el elemento del elemento de vista de lista seleccionado (por ejemplo, texto de una vista de texto de vista de lista) se elige una acción del menú contextual para poder procesarla? Aquí hay un código:

protected void onCreate(Bundle savedInstanceState) { ------- lv1 = (ListView) findViewById(R.id.listings); registerForContextMenu(lv1); lv1.setOnItemClickListener(this); } 

Y el onCreateContextMenu:

 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item .getMenuInfo(); switch (item.getItemId()) { case R.id.watch: String name = ""; return true; case R.id.buy: return true; default: return super.onContextItemSelected(item); } } 

Quiero obtener texto de una vista de texto en un elemento de la lista. ¿Cómo logro eso?

debe registrar LISTVIEW para el menú contextual.

Aquí está la fuente.

para onCreate() :

  registerForContextMenu(lv); 

Y para acceder al elemento seleccionado durante un clic largo:

 @Override public 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); } } 

Para obtener el elemento del elemento ListView seleccionado, consulte el objeto ContextMenuInfo (consulte el último método implementado a continuación). Solución completa de la siguiente manera:

1) registrar ListView para el menú contextual en la clase ListActivity

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... getListView().setAdapter(mAdapter); registerForContextMenu(getListView()); } 

1a) si tiene una Vista compleja en su lista, es posible que necesite habilitar un clic prolongado en cada vista de lista en la clase Adaptador

 @Override public 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) implementar onCreateContextMenu () y onContextItemSelected () en la clase ListActivity

 @Override public 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); } @Override public 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) Primero usamos

  @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add("View Selected Text"); } 

2) list – es ref si ListView

 registerForContextMenu(list); 

3)

 @Override public 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(); } } 

primera lista de obtención usando ID

 Context context = getApplicationContext(); ComponentName component = new ComponentName(context.getPackageName(), TestReplaceHomeAppActivity.class.getName()); String packname = context.getPackageName(); Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage(packageName); if(LaunchIntent != null){ startActivity(LaunchIntent); } else { Toast.makeText(getActivity().getBaseContext(),"APPLICATION IN NOT AVAILABEL", Toast.LENGTH_SHORT).show(); } 

Escriba esto en su longPressListener con la vista de lista que usa:

  ListView list = (ListView) findViewById(android.R.id.list); registerForContextMenu(list); 

Y estos son los métodos:

  @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; Adapter adapter = getListAdapter(); Object item = adapter.getItem(info.position); menu.setHeaderTitle("Choose"); menu.add(0, v.getId(), 0, "Delete"); } @Override public boolean onContextItemSelected(MenuItem item) { if (item.getTitle() == "Delete") { deleteContact(item.getItemId()); } else if (...) { // code } else { return false; } return true; } public void deleteContact(int id){ // your code what to do for the clicked item } 

use estos métodos, onCreateContextMenu y onContextItemSelected \

 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { if (v.getId() == R.id.listview) { menu.setHeaderTitle("Delete"); menu.add(Menu.NONE, 0, 0, "Delete from list"); } } /** * Responding to context menu selected option * */ @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo(); int menuItemIndex = item.getItemId(); // check for selected option if (menuItemIndex == 0) { // user selected delete // delete the listrow ..(in your onitemclicklistener there is a parameter called as'postition' use this position and use some method to delete the data corresponding to the position value ) // reloading same activity again Intent intent = getIntent(); finish(); startActivity(intent); } return true; } 

Las respuestas anteriores son muy precisas y al punto para el caso proporcionado. Una vez dicho esto, me trajeron aquí con el uso de un convertView para mi convertView de convertView y estoy respondiendo por aquellos que también son traídos aquí con este caso.

Si su LISTVIEW está usando convertView e inflando un diseño diferente (digamos list_MyItem.xml ), modifique directamente list_MyItem.xml para tener:

 android:longClickable="true" 

Por ejemplo, si la vista de lista se rellena con botones, modifique el botón como tal: