【问题标题】:onActivityforResult is not triggered/calledonActivityforResult 未被触发/调用
【发布时间】:2016-09-28 19:26:10
【问题描述】:

我有活动 A 和 B。当我在活动 B 上并且触发了一些操作时,我正在调用活动 A。在活动 B 上,我正在使用 startActivityforResult,检查活动结果上的请求代码并显示警报对话框调用 Activity A 后的 UI。但是我的onActivityresult 没有被调用,因此我的对话框。

下面是我的代码 sn-p。

 public void Logout() {
        autoLogoutHandler.removeMessages(MSG_APP_LOGOUT);
        Intent intent = new Intent(Activity_B.this,
                Activity_A.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivityForResult(intent, OPEN_NEW_ACTIVITY);
    }

我的 onActivityResult 我正在检查我的请求代码,但它从来没有 调用。

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == OPEN_NEW_ACTIVITY) {
                alert = new AlertDialog.Builder(getBaseContext())
                        .setTitle(null)
                        .setMessage(getString(xxxx))
                        .setIcon(null)
                        .setPositiveButton(getString(xxxx), new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog, int whichButton) {


                            }
                        }).show();
            }
    }

有人可以帮我解决为什么我的onActivityResult 没有被调用吗?

【问题讨论】:

  • 你的onActivityResult是在ActivityB还是ActivityA上?
  • 在活动 B 上。
  • 你为什么使用intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);? ActivityA 是否在某个时间点在 ActivityB 之前启动?
  • 是的。 ActivityA(登录屏幕)在我的应用程序的登录屏幕中。然后启动activityB。

标签: java android android-intent android-activity onactivityresult


【解决方案1】:

您当前的流量是

A -> opens -> B -> start onActivityResult -> A // doesn't work

你应该怎么做:

A- > start onActivityResult -> B -> setResult() & finish() -> A -> handles onActivityResult -> voila!

活动A调用并等待活动B,在此活动过程得到信息后,它需要返回操作结果是成功RESULT_OK还是失败/取消RESULT_CANCELED

Activity B 关闭后,Activity A 将执行onActivityResult 方法,作为最佳实践,您将检查从startActivityForResult 调用的requestCode,然后检查操作是否成功...

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
    if (resultCode == RESULT_OK) {
        // do work if successful
    }
}
...

根据文档了解 onActivityResult: https://developer.android.com/training/basics/intents/result.html

【讨论】:

  • 这就是我如何称呼我的 Activity_B。当我在 Activity_B 上时,我里面有不同的片段.. 从其中一个片段我退出应用程序到 Activity_A(登录屏幕)。当我从 Activity_A 转到 Activity_B 时,我不想使用 startacitivityForResult ,因为没有结果检查。 public void Activity_B() { Intent intent = new Intent(Activity_A, Activity_B.class);意图.setFlags(意图.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("tabIndex", 0);开始活动(意图); }
  • 该方法上的 startActivity 应替换为 startActivityForResult(intent, code)
  • 所以你想让我把我的 UI 即警报对话框放在 activity_A 中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
相关资源
最近更新 更多