3

私はチュートリアルを進めており、メニューを作成するためのこのサンプルコードを示しました:

public void onCreateOptionsMenu(Menu m) {
        super.onCreateOptionsMenu(m);
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.time_list_menu, m);
    }

エラーが発生したので、ブール値に変更しました。これが現在の状態です。代わりにこれを実行すると、次のように機能します。

public boolean onCreateOptionsMenu(Menu m) {
      super.onCreateOptionsMenu(m);
      MenuInflater menuInflater = getMenuInflater();
      menuInflater.inflate(R.menu.time_list_menu, m);
      return true;
  }

しかし、スタックオーバーフローに関する別の質問から、このようなものもあります

onCreateOptionsMenu がメニューを表示しない理由を理解する

Android doc にもこれがあります:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.game_menu, menu);
    return true;
  }

スーパーへの呼び出しはどこに行きましたか?なぜそれが必要ないのですか? 間違った方法でメニューを作成する正しい方法は何ですか?

私が主題に取り組んでいる間、Docには@Overrideも表示されますが、私はそれを持っておらず、機能しています。メソッドが明示的にオーバーライドされている場合、それが必要かどうかについて私は混乱しています。助けてくれてありがとう。明確化が必要な場合は、お知らせください。

4

3 に答える 3

3

2 つの特定の問題に対処するには:

  1. super.onCreateOptionsMenu: 一般に、アクションを改良する場合は、この方法で基本クラス関数を呼び出すことをお勧めします。この場合、(わかる限り)違いはありませんが、ドキュメントでは推奨されているため、将来のAndroidバージョンの互換性を確保するために実行する必要があります.
  2. @Override: この注釈は任意ですが、非常に便利です。メソッドの署名が基本クラスの署名と一致することを保証します。これは、(メソッドがオーバーライドしているメソッドとは異なるという意味で) わずかに間違ったメソッドを宣言すると、コンパイラは不一致を検出することを意味します (単に新しいメソッドと見なし、コンテキストで呼び出さないのではなく)。

したがって、厳密に必要でない場合は、どちらも有用で正しいものです。

于 2012-05-15T05:13:59.700 に答える
1

スーパーを呼び出す必要があります。javadoc によると、メニューの注文プロセスに影響します。呼び出し位置は特に意味はないと思います。

于 2012-05-15T04:34:57.303 に答える
0

AndroidMenuオプションを作成するには、以下のコードを使用します。

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    switch (item.getItemId()) 
    {
    case R.id.yourItemID:
        //do whatever you want here
        break;
    case R.id.yourItemID:
        //do whatever you want here
        break;
    }
    return true;
}

上記のコードは私にとってはうまくいきます。このチュートリアルを試してみてください。わかりやすく説明されています。

于 2012-05-15T04:59:45.290 に答える