单击列表视图中的列表项长按菜单不会弹出。我已经扩展了基本适配器并使用了视图持有者来实现带有textviews和图像按钮的自定义列表。
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"
/>
我已经尝试了很多天了。我认为不可能为这样的自定义列表视图注册Context-menu。如果我错了,请纠正我(可能带有示例代码)。
现在我正在考虑向列表项添加一个按钮,并在单击它时显示一个菜单。是否可以通过其他方式使用Dialogs?
非常感谢任何帮助..
答案 0 :(得分:8)
当列表视图具有复选框,radioButton等可聚焦项时,就会出现这样的问题。要在可聚焦项目的列表项的布局中解决此问题,请执行以下操作:
android:focusable="false";
答案 1 :(得分:5)
为什么不使用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 :(得分:2)
使用ListView的OnItemLongClickListener(通过set~)方法。