【问题标题】:onActivityResult gets called when Activity starts, not when its finishedonActivityResult 在 Activity 启动时调用,而不是在它完成时调用
【发布时间】:2013-08-16 10:59:39
【问题描述】:

我写了一个带有一些标签的 FragmentActivity。当我使用 startActivityForResult 调用其他活动(用于设置用户首选项)时(如果它在 FragmentActivity 或 ListFragment 中没有区别),当我启动此首选项活动时调用 onActivityResult 方法,但在我完成时不会调用它,如我希望它(如果它在 FragmentActivity 或 ListFragment 中也没有区别)。在我完成偏好活动后,这个方法根本不会被调用。

我的问题是我想在完成首选项活动后刷新当前选项卡(并设置上次使用的选项卡 ID),我希望能够在 onActivityResult 方法中执行此操作。

这是创建偏好活动的类:

public abstract class ListFragmentBase<I> extends ListFragment implements
LoaderCallbacks<List<I>> {

这是将我转发到此类内的偏好活动的方法:

protected void forwardToPreferences(int currentTab){            
        Intent intent = new Intent(getActivity(), GlobalPreferencesActivity.class);
        getActivity().startActivityForResult(intent, 10);
}

这是在调用上述方法后调用的方法,但不是在我完成调用的活动后调用的方法

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

这是偏好活动:

public class GlobalPreferencesActivity extends Activity {

在该类中,您会看到我如何调用完成方法:

TextView confirmSettings = (TextView) view.findViewById(R.id.confirm_settings);
confirmSettings.setTextSize(PreferenceHelper.getSizeHeader(getApplicationContext()));
    confirmSettings.findViewById(R.id.confirm_settings).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {    
            if(BaseFragmentActivity.lastActivity != null){
                BaseFragmentActivity.lastActivity.onRefreshData();
        }
            ComponentName callingActivity = getCallingActivity();
            GlobalPreferencesActivity.this.finish();
        }
    });

【问题讨论】:

  • 邮政编码和logcat输出。
  • 我可以通过在 AndroidManifest.xml 中为偏好活动添加 android:launchMode="standard" 来解决我的特殊问题(之前是 - 像 ListFragements - 设置为“singleInstance”)。但是 startActivityForResult 的行为对我来说仍然很奇怪。
  • 抱歉,这是我第一次添加代码,花了我一段时间。现在我必须以正确的方式找出 logcat 的格式并添加它。
  • 只是一个 stackoverflow 问题:我是否必须在每行 logcat 信息之前添加 4 个空格才能使其看起来像代码?有没有其他办法格式化?
  • @Richard 你可以屏蔽引用它

标签: android android-intent


【解决方案1】:

请确保您调用的活动不是 AndroidManifest 文件中的 singleInstance。确保它是 singleTop 或 standard。

希望这对你们也有用

【讨论】:

  • 哈利路亚,辛苦了!讨厌的错误,出现在我在 Android 4.3 上的项目中,使用相机来获取意图结果。
  • 我将singleTask 设置为启动模式。如果删除它可以工作
  • 如果相关活动是系统Settings活动怎么办?
【解决方案2】:

这是安卓的bug

onActivityResult() called prematurely

Why does result from startActivityForResult come before activity really starts?

不知道你用的是哪个版本,有没有解决/纠正

【讨论】:

  • 谢谢我会检查这是否对我有帮助,但它绝对是同样的问题。很抱歉我在处理stackoverflow方面没有经验,但我现在必须将我的问题标记为重复吗(如果是:如何)?
  • @Richard 没问题,别担心。至少你发现你不是一个人有同样的麻烦;-)。如果您认为我已回答,您可以验证我的回答,以便其他人知道问题已得到解答。
【解决方案3】:

onActivityResult,在onResume之后调用,

当你从你的活动跳转到另一个活动而没有调用完成的基本原因。然后最后一个活动进入 onStop 状态。

在 onStop、onstart、onResume 方法调用之后调用 onActivityResult。

【讨论】:

    【解决方案4】:

    onActivityResult 调用时......假设我们有 2 个活动,您从一个活动转到另一个活动,然后现在您处于第二个活动,如果您完成第二个活动然后跳回来到第一个活动,然后在 onStop、onrestart、onstart、onResume 方法调用之后调用 onActivityResult。

    【讨论】:

    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2013-06-09
    相关资源
    最近更新 更多