我在 LitsActivity 中有一个 ListView,它由从单独的 XML 文件扩充的行组成。这些行由我为此 ListView 的自定义适配器中的 convertView
方法填充。我试图在每一行上调用上下文菜单。通常,我们通过调用
registerForContextMenu(ourListViewInstance);
在 onCreate
方法中。但这对我不起作用,onCreateContextMenu
方法没有被调用,因为此时没有列表行,它们稍后出现。我试着用
registerForContextMenu(行);
在我的自定义列表适配器的 getView
方法中,以便每一行都注册为“长按”并且它有效,但由于某些原因它是 Not Acceptable 并且需要通常的方法。
这是我的 ItemsAdapter,它创建 ListView 行的实例:
class ItemsAdapter extends ArrayAdapter<ItemsModel> {
public ItemsAdapter(ArrayList<ItemsModel> list) {
super(Items.this, R.layout.custom_row_view, list);
}
private ItemsModel getModel(int position) {
return (((ItemsAdapter) itemsList.getAdapter()).getItem(position));
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
final ItemsModel currentItemModel = getModel(position); // Model class storing data for all the rows.
ItemsResourceManager resourceManager = null; // class used to easily get and set row views.
if (row == null) {
row = View.inflate(getBaseContext(), R.layout.custom_row_view, null);
row.setClickable(true);
row.setFocusable(true);
row.setBackgroundResource(android.R.drawable.menuitem_background);
resourceManager = new ItemsResourceManager(row);
row.setTag(resourceManager);
} else {
resourceManager = (ItemsResourceManager) row.getTag(); //class used to easily get and set row views.
}
registerForContextMenu(row); // works for each separate LisView row
//... skipped setText actions for this row
}
return row;
}
}
我还尝试从任何可聚焦元素中完全清除我的 custom_row_view.xml,但没有帮助。
最佳答案
问题出在我的自定义适配器类中的 onClickListener 中。它阻止了 contextMenu 处理,因为每次都会调用“短”单击。现在,clickListener 和 ContextMenu 处理程序都位于 ListActivity 类中,并且工作正常。
关于Android:包含自定义行和调用 ContextMenu 的 ListActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848482/