单击ActionBar中的后退按钮时,不会调用onActivityResult

时间:2013-11-23 10:32:56

标签: android android-actionbar onactivityresult

这是我的问题:

  1. 创建MainActivity。添加一个按钮,它将启动另一个活动SecondActivity。

            Intent i = new Intent(getActivity(),SecondActivity.class);
            startActivityForResult(i,0);
    
  2. 在SecondActivity中,我捕获后退按钮单击事件,并添加一个按钮以返回到第一个Activity。

    单击操作栏中的后退按钮时:

  3. @覆盖

    public boolean onOptionsItemSelected(MenuItem item) {
    
        switch (item.getItemId()) {
            case android.R.id.home:
                // back button
                Intent resultIntent = new Intent();
                // TODO Add extras or a data URI to this intent as appropriate.
                setResult(Activity.RESULT_OK, resultIntent);
                //finish();
                return false;
    
        }
        return super.onOptionsItemSelected(item);
    }
    

    单击活动内的按钮时:

    Button btn = (Button)this.findViewById(R.id.button2);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent resultIntent = new Intent();
            // TODO Add extras or a data URI to this intent as appropriate.
            setResult(Activity.RESULT_OK, resultIntent);
            finish();
        }
    });
    

    当我单击SecondActivity中的按钮时,将调用MainActivity中的onActivityResult,但如果单击SecondActivity的Actionbar中的后退按钮,则从未调用它。谁能告诉我为什么?感谢

3 个答案:

答案 0 :(得分:4)

以下是正在运行的代码:

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            // back button
            Intent resultIntent = new Intent();
            setResult(Activity.RESULT_OK, resultIntent);
            finish();
            return true;

    }
    return super.onOptionsItemSelected(item);
}

我想finish()将关闭当前的Activity,并返回true表示已处理动作。 (默认的后退动作似乎与finish()不同。)

答案 1 :(得分:1)

试试这个: -

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
    case android.R.id.home:
        Intent resultIntent = new Intent();
        setResult(Activity.RESULT_OK, resultIntent);
        onBackPressed();
        return true;
}
return super.onOptionsItemSelected(item);
}

答案 2 :(得分:1)

好的答案是Gopal Rao code in the same question。它对我有用。这是他的解决方案的副本:

    public boolean onOptionsItemSelected(MenuItem item) {
       if (item.getItemId() == android.R.id.home) {
          Intent result = new Intent((String) null);
          result.putExtra("SOME_CONSTANT_NAME", true);
          setResult(RESULT_OK, result);
          finish();
          return true;
       } 
       else {
          return super.onOptionsItemSelected(item);
       }
    }