ContextMenu не появляется при длинном клике - PullRequest
5 голосов
/ 18 мая 2010

Контекстное меню не выскакивает при длительном нажатии на элементы списка в представлении списка. Я расширил базовый адаптер и использовал держатель для представления пользовательского списка с текстовыми представлениями и кнопкой изображения.

adapter = new MyClickableListAdapter(this, R.layout.timeline, mObjectList);
       list.setAdapter(adapter);
       registerForContextMenu(list);  

Реализация onCreateContextMenu

  @Override
 public void onCreateContextMenu(ContextMenu menu, View v,
   ContextMenuInfo menuInfo) {
  // TODO Auto-generated method stub
  super.onCreateContextMenu(menu, v, menuInfo);

  Log.d(TAG, "Entering Context Menu");

   menu.setHeaderTitle("Context Menu");

  menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete")
  .setIcon(R.drawable.icon);
 }

XML для просмотра списка здесь

 <ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

Я пробовал это много дней. Я думаю, что невозможно зарегистрировать контекстное меню для такого вида списка. Поправьте меня, если я ошибаюсь (возможно, с примером кода).

Теперь я подумываю добавить кнопку в элемент списка, и при ее нажатии появится меню. Возможно ли это каким-либо иным способом, кроме использования диалогов?

Любая помощь будет высоко ценится.

Ответы [ 3 ]

8 голосов
/ 29 марта 2011

Такая проблема возникает в виде списка, когда в нем есть такие элементы, как флажок, радио-кнопка и т. Д. Чтобы решить эту проблему в макете для элемента списка для фокусируемых элементов, включите:

android:focusable="false";
5 голосов
/ 18 мая 2010

Почему вы не использовали ListActivity?

В моем ListActivity у меня есть:

@Override
protected void onCreate(Bundle savedInstanceState) {
    /* setContentView() and all stuff that happens in this method */
    registerForContextMenu(getListView());
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterView.AdapterContextMenuInfo info;
    try {
        info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    } catch (ClassCastException e) {
        Log.e(TAG, "bad menuInfo", e);
    return;
    }

    Something something = (Subway) getListAdapter().getItem(info.position);
    menu.setHeaderTitle(something.getName());
    menu.setHeaderIcon(something.getIcon());
    menu.add(0, CONTEXT_MENU_SHARE, 0, "Do something!");
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    AdapterView.AdapterContextMenuInfo info;
    try {
        info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    } catch (ClassCastException e) {
        Log.e(TAG, "bad menuInfo", e);
        return false;
    }

    switch (item.getItemId()) {
        case DO_SOMETHING:
            /* Do sothing with the id */
            Something something = getListAdapter().getItem(info.position);
            return true;
    }
2 голосов
/ 18 мая 2010

Используйте OnItemLongClickListener (через set ~) метод ListView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...