我在LitsActivity中有一个ListView,它由从单独的XML文件中膨胀的行组成。这个行由我的自定义适配器中的convertView
方法填充此ListView。我正在尝试在每一行上调用上下文菜单。通常,我们通过调用
registerForContextMenu(ourListViewInstance);
onCreate
方法中的。但它对我不起作用,onCreateContextMenu
方法没有被调用,因为此时没有列表行,它们稍后出现。我试着用
registerForContextMenu(row);
在我的自定义列表适配器的getView
方法中,以便每行都注册“长按”并且它可以正常工作,但由于某些原因,它是不可接受的,并且需要通常的方法。
这是我的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,但它没有帮助。
答案 0 :(得分:1)
问题出在我的自定义适配器类的onClickListener中。它阻止了contextMenu处理,因为每次都会调用“短”点击。现在,clickListener和ContextMenu处理程序都位于ListActivity类中,它可以正常工作。