如何在单独的类中提供所有ContextMenu逻辑



我试图将所有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 );
}

相关内容

  • 没有找到相关文章

最新更新