android菜单无法正常工作

时间:2011-09-13 12:45:02

标签: android

在Android应用中,我使用菜单进行活动

<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
  <item 
  android:id="@+id/logout"
  android:title="Logout" />
  <item 
  android:id="@+id/compose"
  android:title="Compose"  />
  <item 
  android:id="@+id/refresh"
  android:title="Refresh" />
</menu>

和活动:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.inboxmenu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.logout:
        SharedPreferences settings =getSharedPreferences("CASPreferences", MODE_PRIVATE);
        SharedPreferences.Editor prefEditor = settings.edit();
        prefEditor.putString("uid", "");
        prefEditor.putString("stdno", "");
        prefEditor.putString("firstname", "");
        prefEditor.putString("lastname", "");
        prefEditor.putString("lastname", "");
        prefEditor.commit();
        Intent myIntent = new Intent(this, LoginActivity.class);
        startActivity(myIntent);
        return true;
    case R.id.refresh:
        Log.e("menu" , "refresh");
        //Intent intent=new Intent(this,MainActivity.class);
        startActivity(getIntent());
        finish();
    case R.id.compose:
        Log.e("menu" , "compose");
        Intent intent1=new Intent(this,ComposeActivity.class);
        startActivity(intent1);




    default:
        return super.onOptionsItemSelected(item);
    }
}

但是当我点击刷新按钮时,它会去撰写活动!就像你点击撰写一样。

为什么会这样?

3 个答案:

答案 0 :(得分:1)

break添加到您的switch语句中,否则您的代码将继续进入第三种情况

答案 1 :(得分:1)

您没有为每个交换机stmt添加 break; 。 请尝试分享结果。

答案 2 :(得分:0)

重写您的switch声明。

switch (item.getItemId()) {
case R.id.logout:
    ...
    return true;
case R.id.refresh:
    ...
    finish();
    break; // <- Add this line
case R.id.compose:
    ...
    break; // <- Add this line
default:
    return super.onOptionsItemSelected(item);
}

每个case块必须由break括起来。

  

break语句是必要的,因为如果没有它们,switch块中的语句就会失败:匹配的case标签之后的所有语句都按顺序执行,而不管后续case标签的表达式,直到遇到break语句。

第一个break块中不需要

case,因为流被return语句中断。

参考:http://download.oracle.com/javase/tutorial/java/nutsandbolts/switch.html