Intereting Posts
Переход общего элемента с фрагментами с помощью add () вместо replace ()? Ошибка загрузки скрипта ScriptC – скрипт рендеринга android AccountManager без адаптера синхронизации? Hello-JNI для Android Studio Запретить Proguard удалять пустой конструктор фрагмента Внедрить android: src = "@ drawable / image" программно в Android Как обрабатывать несколько прослушивателей взаимодействия фрагментов в одном действии правильно? Портирование приложения «100 действий» на фрагменты без смерти Как изменить положение плавающей метки в TextInputLayout в android Java.lang.illegalstateexception: на этом макете уже установлен завод Максимальная длина строковой переменной в Android В чем смысл журнала из тега: «szipinf» и текст: «Инициализация состояния раздувания» из Logcat Содержимое вкладки остается видимым после изменения закладки после изменения ориентации Функция Android Camera takePicture не вызывает функцию обратного вызова Для выбора файла openFileChooser () метод, не вызывающий WebChromeClient из Kitkat 4.4

Использование контекстного меню со списком в 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; }