1

アイコンメニューアイテムのタップを処理するか、実装することで可能であることがわかりました

onOptionsItemSelected

活動の中で、または使用して

onMenuItemClickListener

ボタンの onclick リスナーのように。最初の方法と 2 番目の方法を使用する方がよいのはいつですか? 私の意見では、外部リスナーを使用するとコードがよりモジュール化されますが、新しいクラスが作成されますが、最初の方法を使用すると新しいクラスは作成されず、コードがモジュール化されなくなります...

4

2 に答える 2

1

以下に概説した以外のユースケースもありますが、定期的に出てくる一般的なケースを入れています。

onOptionsItemSelected

を使用している場合は、アクション バーに項目を追加するで説明されている方法で、アクション バーにメニュー項目を追加するFragmentことを検討してください。onOptionsItemSelected

これが説明するのは、 onCreateOptionsMenu内に実装することFragmentです。これを実現するには、 でsetHasOptionsMenuを呼び出す必要がありますonCreate

protected void onCreate(Bundle savedInstanceState) {
    this.setHasOptionsMenu(true);
}

これを設定すると、メニュー項目を追加できるActivity呼び出しが実際に行われます。onCreateOptionsMenu

@Override
public boolean onCreateOptionsMenu(Menu menu){
    super.onCreateOptionsMenu(menu);

    // add items corresponding to this Fragment
    menu.add(...);

    return true;
}

これをお勧めする理由は、どのメニューを呼び出すかなどを把握するFragment代わりに、より多くのメニュー処理コードを に入れることができるからです。ActivityFragment

この場合、メニュー項目をクリックするとonOptionsItemSelected、あなたの内部で呼び出されますFragment

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.my_id1:
            dothing1();
            return true;
        case R.id.my_id2:
            dotghing2();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

より長い答えですが、これは 内でメニューのクリックを処理する方法Fragmentです。

onMenuItemClickListener

の場合onMenuItemClickListener、これは、上記の事前準備済みメソッドを使用して独自のメソッドを実装したくない場合に使用されます。

つまり、インターフェースでメソッドを実装して生成するということです。 OnMenuItemClickListener次に、これを実装した を呼び出すメニューを割り当てます。上記のオプションは、 to関係の事前準備済みの実装に基づいて使用するActivityものを想定しているためです。ActivityActivityFragment

于 2013-02-21T18:07:12.270 に答える
1

API 14 以降 (ICS 以降) をターゲットにしている場合は、ActionProviderを実装できます。それができない場合は、常にメニューに入力し、 を使用してメニューのクリックを処理するベース アクティビティを実装できますonOptionsItemSelected。これは、すべてのアクティビティで「About」または「Settings」メニュー項目を実装するのに適した方法です。

于 2013-02-21T17:54:09.470 に答える