在Activity启动时调用onActivityResult,而不是在它完成时调用

ric*_*ard 8 android android-intent

我用一些标签写了一个FragmentActivity.当我用startActivityForResult调用一个额外的活动(我用它来设置用户首选项)时(如果它在FragmentActivity或ListFragment中没有差异),当我启动这个首选项活动时,会调用onActivityResult方法,但不会在我完成它时调用我期待它(如果它在FragmentActivity或ListFragment中再没有差异).在完成首选项活动后,此方法根本不会被调用.

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

这是创建首选项活动的类:

public abstract class ListFragmentBase<I> extends ListFragment implements
LoaderCallbacks<List<I>> {
Run Code Online (Sandbox Code Playgroud)

这是将我转发到此类中的首选项活动的方法:

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

这是在调用上面的方法之后调用的方法,而不是在我完成被调用的活动之后调用的方法

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)

这是偏好活动:

public class GlobalPreferencesActivity extends Activity {
Run Code Online (Sandbox Code Playgroud)

在那个课程中你会看到我如何调用finish方法:

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();
        }
    });
Run Code Online (Sandbox Code Playgroud)

nad*_*fif 8

请确保您的调用活动不是AndroidManifest文件中的singleInstance.确保它是singleTop或标准.

希望这对你们也有用


HpT*_*erm 4

这是Android的一个bug

onActivityResult() 过早调用

为什么 startActivityForResult 的结果在活动真正开始之前出现?

我不知道您使用的是哪个版本以及是否已解决/更正