我正在尝试创建一个自包含的自定义ListView
,并希望从自定义视图类本身处理该ListView上的所有事件。此自定义视图将进入库,可以在不同的活动和片段中使用。
我似乎面临的唯一问题是从我的ListView中处理上下文菜单点击。
我在Activity.registerForContextMenu(View)
处理程序期间使用onAttachedToWindow()
注册上下文菜单处理,并在onDetachedFromWindow()
期间取消注册,以便我不必在活动中注册。但是,我仍然无法在自定义视图中找到一种方法来回复onContextItemSelected(MenuItem)
。
我的自定义视图是否有办法处理由它提供的上下文MenuItems的点击而不将代码放在它们所属的每个活动中?
另外,如果您是downvote,或者您认为将事件处理分离为自定义视图是一种愚蠢的事情,请提供理由。
答案 0 :(得分:1)
解决此问题的一种方法是为列表视图实现上下文菜单,而不是将其与属于活动的操作混合在一起。
您只需注册OnItemLongClickListener
:
listView.setOnItemLongClickListener(this);
并实施onItemLongClick
方法。例如:
private AlertDialog mAlertDialog;
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (mAlertDialog != null) {
mAlertDialog.dismiss();
}
mAlertDialog = new ActionsForTheItemInTheListViewDialog(view, position);
mAlertDialog.show();
}
其中ActionsForTheItemInTheListViewDialog
将是一些扩展AlertDialog
的类,并会为该项显示不同的选项。这样,自定义组件的逻辑将完全封装在您的库中。