我试图将所有ContextMenu逻辑放在一个单独的类中,但在这个类中我似乎无法识别是否有人选择了一个项目。
我有一个主要活动的应用程序。除了一些其他内容外,此活动还包含一个列表视图。这个列表视图应该包含一个上下文菜单,所以我定义了它对应于它的Clicklistener:
MyListener myListener = new MyListener();
listview.setOnItemClickListener(myListener);
listview.setOnCreateContextMenuListener(myListener);
MyListener同时实现OnItemClickListener和OnCreateContextMenuListener。我这样做是为了保持类的可读性(就像前面提到的那样,已经有了一些其他的UI组件和一些逻辑)。在这一点上,一切都像一种魅力。单击即可识别,同时显示ConextMenu。
现在我还希望MyListener也对ContextMenu中选择的项目做出反应。不幸的是,似乎只有Activities及其相应的SubClass提供了类似onContextItemSelected(menuItem项)的方法。因此,我必须将该逻辑放入我的主要活动中,并通过这样做来分发ContextMenu逻辑(我也测试了这一点,它很有效,但分发逻辑在我看来是不可能的)。
我想念这里吗?有没有一种方法可以用另一种方式为我的列表视图定义某种ContextMenu ClickListener,而不是将其放在我的主活动中?还是我做了一些不好的练习而没有意识到?
期待您的意见!
干杯无眼
一个快速简单的解决方案是将点击转发到MyListener
类
在MyListener
类中创建一个新方法。理想情况下,我会像最初的方法一样称之为
public boolean onContextItemSelected(MenuItem item)
在这种方法中,您可以实现您的逻辑。
然后使MyListener
变量成为Activity
的字段
现在,只需覆盖Activity
中的onContextItemSelected(MenuItem item)
,并将单击转发到侦听器类:
@Override
public boolean onContextItemSelected( MenuItem item ) {
return myListener.onContextItemSelected( item );
}