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

すばやく簡単な解決策は、クリックをMyListenerクラスに転送することです。
クラスに新しいメソッドを作成しますMyListener。理想的には、元のメソッドと同じように呼び出します。

public boolean onContextItemSelected(MenuItem item)
このメソッドでは、ロジックを実装します。

次に、MyListener変数を のフィールドにしますActivity。ここで、クリックを
オーバーライドonContextItemSelected(MenuItem item)して、リスナー クラスに転送します。Activity

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