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

时间:2013-02-10 15:19:31

标签: java android user-interface

我正在尝试将所有ContextMenu逻辑放在一个单独的类中,但似乎我无法在此类中识别是否有人选择了某个项目。

我有一个主要活动的应用程序。除了其他一些内容之外,此活动还包含列表视图。此列表视图应包含上下文菜单,因此我将其定义为与其Clicklistener相对应:

MyListener myListener = new MyListener();

listview.setOnItemClickListener(myListener);
listview.setOnCreateContextMenuListener(myListener);

MyListener实现OnItemClickListener和OnCreateContextMenuListener。我这样做是为了保持类的可读性(就像之前已经提到的其他UI组件和一些逻辑一样)。到目前为止,一切都像魅力一样。识别单击,并显示ConextMenu。

现在我还希望MyListener也对ContextMenu中选择的项做出反应。不幸的是,只有Activities及其相应的SubClasses似乎提供了类似onContextItemSelected(menuItem item)的方法。所以我必须把这个逻辑放到我的主要活动中并通过这样做来分发我的ContextMenu逻辑(我也测试了它,它可以工作,但在我看来,分配逻辑似乎是不行的。)

我在这里想念一下吗?有没有办法为我的listview定义某种ContextMenu ClickListener,而不是将其放在我的主要活动中?或者我在没有认识的情况下做了一些不好的练习?

期待您的意见!

干杯无眼

1 个答案:

答案 0 :(得分:0)

快速简便的解决方案是将点击转发到您的MyListener课程 在MyListener课程中创建一个新方法。理想情况下,我会像原始方法一样调用它:

public boolean onContextItemSelected(MenuItem item)
在这种方法中,您可以实现逻辑。

然后将MyListener变量设为Activity的字段 现在,只需覆盖onContextItemSelected(MenuItem item)中的Activity,然后将点击转发给您的听众类:

@Override
public boolean onContextItemSelected( MenuItem item ) {
    return myListener.onContextItemSelected( item );
}