Android菜单仅适用于每个应用运行一次

时间:2012-03-06 10:35:39

标签: android sharedpreferences

我的Android应用程序遇到了一个奇怪的问题。我的主要活动有一个菜单按钮附带的菜单。问题是,菜单按钮只能工作一次。按下后,必须重新启动应用程序才能再次使用菜单按钮。

(已消毒的)代码是:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.main);

    settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    startActivity(new Intent(this, PreferencesActivity.class));

    return(super.onCreateOptionsMenu(menu));
}

@Override
public void onBackPressed() {
    this.finish();
}

@Override
public void onDestroy() {
    super.onDestroy();
    this.finish();
}

@Override
public void onStop() {
    super.onStop();
    this.finish();
}

并且首选项活动看起来像

public class PreferencesActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

        addPreferencesFromResource(R.xml.preferences);
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onStop() {
        super.onStop();
        this.finish();
    }

    @Override
    public void onBackPressed() {
        this.finish();
    }
}

我应该如何解决这个问题?

TIA

3 个答案:

答案 0 :(得分:5)

onCreateOptionsMenu仅在您第一次打开OptionsMenu之前调用一次。 而是使用onPrepareOptionsMenu来呼叫您的startActivity(new Intent(this, PreferencesActivity.class)); 每次单击“菜单 - 按钮”时都会调用onPrepareOptionsMenu

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    startActivity(new Intent(this, PreferencesActivity.class));
    return super.onPrepareOptionsMenu(menu);
}

答案 1 :(得分:1)

问题是您正在启动Activity而不是显示菜单。 通常的方法是在onCreate Options菜单中膨胀一个菜单,并在此菜单中有一个设置项,如果按下则显示首选项活动。

汤米是对的。如果您想立即启动首选项活动(请记住这是Android应用程序的异常行为),您可以在onPrepareOptionsMenu中执行此操作。 在正常流程中,菜单在onCreateOptionsMenu回调中创建一次,然后重新使用。

答案 2 :(得分:0)

单击菜单按钮后,您将转到PreferencesActivity,然后每当您点击那里时......由于onBackPressed方法,第一个活动将被关闭。

你能告诉我你究竟想要什么吗?