Использование контекстного меню со списком в android

Я разрабатываю приложение для Android. У меня будет listview, и я установил контекстное меню для отображения, когда элемент listview long -pressed. Как я могу получить элемент из выбранного элемента списка (например, текст из текстового списка listview) после Действие из контекстного меню выбрано так, что я могу его обработать? Вот какой код:

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

И 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); } } 

Я хочу получить текст из текстового представления в элементе списка. Как я могу это достичь?

Solutions Collecting From Web of "Использование контекстного меню со списком в android"

Вы должны зарегистрировать LISTVIEW для контекстного меню.

Вот источник.

onCreate() :

  registerForContextMenu(lv); 

И для доступа к выбранному элементу при длительном нажатии:

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

Чтобы получить элемент из выбранного элемента ListView, обратитесь к объекту ContextMenuInfo (см. Последний реализованный метод ниже). Полное решение:

1) зарегистрировать ListView для контекстного меню в классе ListActivity

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

1a), если у вас есть сложный вид в вашем списке, вам может потребоваться включить длинный щелчок по каждому списку в классе Adapter

 @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) реализовать onCreateContextMenu () и onContextItemSelected () в классе 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) Сначала мы используем

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

2) list – это ref, если 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(); } } 

Сначала получить список, используя идентификатор

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

Напишите это в своем longPressListener со списком, который вы используете:

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

И это методы:

  @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 } 

Используйте эти методы, onCreateContextMenu и 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; }