1

我有一些 XML 用作 Android 文本菜单。

这是XML

   <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_settings"
    android:title="@string/menu_settings"
    android:orderInCategory="100"
    android:showAsAction="never" />
<item android:id="@+id/menu_search" android:title="@string/menu_search"></item>
<item android:id="@+id/exit" android:title="@string/menu_exit" android:orderInCategory="200" ></item>

 </menu>

在使用以下代码膨胀菜单

   public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

当我检查单击的菜单项时,我使用它。

  public boolean onOptionsItemSelected(MenuItem item) {
        int itemid = item.getItemId();
        Toast.makeText(this, "You pressed the icon!" + itemid, itemid).show();
        return true;
    }

这为我按下的每个菜单项提供了一个数字 ID。我是否应该使用案例语句来检查这一点,然后启动我要打开的页面?或者有没有办法让我将意图链接到菜单项?将此代码添加到每个屏幕似乎有点浪费。

4

2 回答 2

0

您应该使用 case 语句来调用:-

public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.menu_settings:

             return true;
              case R.id.menu_setting2:

             return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
于 2012-09-16T13:02:56.987 回答
0

为了在不同的活动中使用相同的菜单,只需在 MenuActivity 类中扩展 Activity 类,而在其他类中只扩展 MenuActivity 类而不是 Activity,这样做他们不需要一次又一次地编写相同的代码。

public class MenuActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                setContentView(R.layout.menulayout);

    }

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

public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

               // pass menu item in cases
        case R.id.menu1:

                Intent intent1 = new Intent(this,
                        Activity1.class);
                startActivity(intent1 );

            break;

                              case R.id.menu2:

                Intent intent2 = new Intent(this,
                        Activity2.class);
                startActivity(intent2 );

            break;

        return true;
    }
}

//这是另一个扩展MenuActivity的Activity

public class Activity1 extends MenuActivity{
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);
}

}

于 2012-09-16T13:27:01.077 回答