1

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

我有一个主要活动的应用程序。除了其他一些东西,这个活动还包含一个列表视图。这个列表视图应该包含一个上下文菜单,所以我定义了它对应于它的 Clicklistener:

MyListener myListener = new MyListener();

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

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

现在我还希望 MyListener 也对在 ContextMenu 中选择的项目做出反应。不幸的是,似乎只有活动及其相应的子类提供了类似 onContextItemSelected(menuItem item) 的方法。因此,我必须将该逻辑放入我的主要活动中,并通过这样做来分发我的 ContextMenu 逻辑(我也对此进行了测试,它有效,但在我看来,分发逻辑似乎是不行的)。

我在这里想念什么吗?有没有办法为我的列表视图定义某种 ContextMenu ClickListener,而不是把它放在我的主要活动中?还是我在没有意识到的情况下做了一些不好的练习?

期待您的意见!

干杯无眼

4

1 回答 1

0

A quick and easy solution is to forward the clicks to your MyListener class.
Create a new method in your MyListener class. Ideally I would call it just like the original method:

public boolean onContextItemSelected(MenuItem item)
In this method you implement your logic.

Then make your MyListener variable a field of your Activity.
Now, just override onContextItemSelected(MenuItem item) in your Activity and forward the clicks to your listener class:

@Override
public boolean onContextItemSelected( MenuItem item ) {
    return myListener.onContextItemSelected( item );
}
于 2013-02-10T15:31:53.060 回答