アプリで第 4 レベルのアクティブ メニューを使用しています。すべてが完璧に機能しますが、メニューの第 4 レベルで 1 つのアイテムを選択すると、システムが呼び出さonOptionsItemSelected
れなくなったため、アプリで選択したアイテムを取得できません。
これが私のコードです
編集 1: -
Id のダッシュが混乱を招いているため、コードから削除しています。そのために残念
public class Main extends FragmentActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// .... some code
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.Level1: {
Toast.makeText(getBaseContext(), "Level 1", Toast.LENGTH_SHORT).show();
break;
}
case R.id.Level2: {
Toast.makeText(getBaseContext(), "Level 2", Toast.LENGTH_SHORT).show();
break;
}
case R.id.Level3: {
Toast.makeText(getBaseContext(), "Level 3", Toast.LENGTH_SHORT).show();
break;
}
case R.id.Level4: {
Toast.makeText(getBaseContext(), "Level 4", Toast.LENGTH_SHORT).show();
break;
}}
return true;
}
そしてここにXMLファイルmain.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/Level1"
android:showAsAction="ifRoom"
android:title="@string/Level1">
<menu>
<item android:id="@+id/Level2"
android:title="@string/Level2">
<menu>
<item android:id="@+id/Level3"
android:title="@string/Level3">
<menu>
<item android:id="@+id/Level4"
android:title="@string/Level4"/>
</menu>
</item>
</menu>
</item>
</menu>
</item>
</menu>
ドキュメントを読んでいましたが、ネストされたサブメニューの制限については記載されていません。
最後に、私の解決策はandroid:onClick="onOptionsItemSelected"
、次のような第 4 レベルの項目にa を追加することでした。
<menu>
<item android:id="@+id/Level4"
android:onClick="onOptionsItemSelected"
android:title="@string/Level4"/>
</menu>
への呼び出しを強制するにはonOptionItemSelected
、機能しますが、より良い解決策はありますか???
編集 2: このウォークアラウンドは Android バージョン 4.0.3 以前では機能しないことがわかりました.!!! 使っていませんonMenuItemSelected
...!!!
今私は問題を抱えています、助けてください...!!