无法完成Android中onOptionsItemSelected的活动

时间:2015-10-27 18:09:36

标签: android android-activity

我正在尝试关闭“从菜单中调用”选项。当选择menuItem menu_close_activity时(和调试时),我注意到调试器总是从返回true步骤跳转到默认值。 我尝试使用ActivityClassName.this.finish(),但我仍然得到相同的结果

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_xxxx:
                break;
            case R.id.menu_yyyy:
                break;
            case R.id.close_activiy:
                // doing some stuff here;
                setResult(0001);
                finish();    // Debugger jumps from here
                return true;
            default:
                return super.onOptionsItemSelected(item); // Debugger jumps to here.
        }
    }

为什么我跳到默认值,而不是返回true?

除了这种方法,我public boolean onCreateOptionsMenu(Menu menu)只做了选项菜单,protected void onCreate(Bundle savedInstanceState)

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_name_list);
        Bundle b = getIntent().getExtras();
        name = b.getString("name");
        setTitle("Students of " + name);
    }

1 个答案:

答案 0 :(得分:0)

我没有看到你活动未完成的原因。这应该。您是否可以向onDestroy()方法添加一些日志,并看到它被调用。

至于Debugger跳跃的原因,在这种情况下,不要相信调试器。我认为它会因为不同线程中发生的不同事情而跳跃。而是添加一些日志以查看实际发生的情况。用以下内容替换您的代码并检查日志。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_xxxx:
            break;
        case R.id.menu_yyyy:
            break;
        case R.id.close_activiy:
            // doing some stuff here;
            Log.d("DEBUG","BEFORE FINISH = "+item.toString());
            setResult(1);
            finish();    // Compiler jumps from here
            Log.d("DEBUG","AFTER FINISH = "+item.toString());
            return true;
        default:
            Log.d("DEBUG","DEFAULT STATEMENT = "+item.toString());
            return super.onOptionsItemSelected(item); // Compiler jumps to here.
    }
}