【问题标题】:onActivityResult is not called when the back button in ActionBar is clicked单击 ActionBar 中的后退按钮时不会调用 onActivityResult
【发布时间】:2013-12-08 07:11:41
【问题描述】:

这是我的问题:

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

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

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

@Override

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);
}

当点击activity内部的按钮时:

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();
    }
});

MainActivity中的onActivityResult在我点击SecondActivity里面的按钮时被调用,但是如果我点击SecondActivity的Actionbar中的返回按钮它从来没有被调用过。谁能告诉我为什么?谢谢

【问题讨论】:

  • 在 onOptionsItemSelected() 中取消注释 finish() 并尝试一次...
  • 我尝试使用finish() 或不使用finish()。两者都不起作用。
  • '返回真;'是该问题的真正关键字。如果您错过了,应用程序将无法正常关闭。

标签: android android-actionbar onactivityresult


【解决方案1】:

这是正在运行的代码:

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 通知action 已经被处理。 (默认的后退动作好像和finish()不一样。)

【讨论】:

  • 如果我在 onOptionsItemSelected 中返回 false,将触发 MainActivity 中的 onCreate 事件。 MainActivity 被重新创建。我想这就是为什么 onActivityResult 从未被调用过的原因。
【解决方案2】:

试试这个:-

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);
}

【讨论】:

  • 我想这与我自己的答案相同。 finish() 和 onBackPressed() 有什么区别?
  • @bagusflyer 它对我有用,所以可能对你有用..但值得一试。
【解决方案3】:

好的答案是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);
       }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多