Android:如何在自定义视图中处理上下文菜单

时间:2015-02-03 20:35:42

标签: android contextmenu

我正在尝试创建一个自包含的自定义ListView,并希望从自定义视图类本身处理该ListView上的所有事件。此自定义视图将进入库,可以在不同的活动和片段中使用。

我似乎面临的唯一问题是从我的ListView中处理上下文菜单点击。

我在Activity.registerForContextMenu(View)处理程序期间使用onAttachedToWindow()注册上下文菜单处理,并在onDetachedFromWindow()期间取消注册,以便我不必在活动中注册。但是,我仍然无法在自定义视图中找到一种方法来回复onContextItemSelected(MenuItem)

我的自定义视图是否有办法处理由它提供的上下文MenuItems的点击而不将代码放在它们所属的每个活动中?

另外,如果您是downvote,或者您认为将事件处理分离为自定义视图是一种愚蠢的事情,请提供理由。

1 个答案:

答案 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的类,并会为该项显示不同的选项。这样,自定义组件的逻辑将完全封装在您的库中。