Контекстное меню не открывается на длинном, нажимают на элементы списка в представлении списка. Я расширил основной адаптер и использовал держателя представления для реализации пользовательского списка с textviews и imagebutton.
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 здесь
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Я пробовал это в течение многих дней. Я думаю, что его невозможное регистрирует Контекстное меню для пользовательского представления списка как это. Исправьте меня, если я неправ (возможно с примером кода).
Теперь я думаю о добавлении кнопки к элементу списка, и он отображает меню при нажатии на него. Действительно ли это возможно с некоторым другим путем, чем использование Диалоговых окон?
Любая справка очень ценилась бы..
Почему вы не использовали 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;
}
Используйте OnItemLongClickListener (через метод set~) ListView.