richard
richard

Reputation: 864

onActivityResult gets called when Activity starts, not when its finished

i wrote a FragmentActivity with some tabs. when i call an additional activity (which i use for setting user-preferences) with startActivityForResult (no differences if its in FragmentActivity or in ListFragment) the method onActivityResult gets called when i starts this preference-activity, but not when i finish it, as i would expect it (again no differences if its in FragmentActivity or in ListFragment). after i finish the preference-activity this method does not get called at all.

my problem is that i want to refresh my current tab (and set the last used tab id) after i finished the preference activity and i hoped to be able to do this in the onActivityResult method.

this is the class creating the preference-activity:

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

this is the method forwarding me to the preference activity inside this class:

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

this is the method that gets called after calling the method above but not after i finished the called activity

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

this is the preference-activity:

public class GlobalPreferencesActivity extends Activity {

and inside that class you see how i call the finish method:

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

Upvotes: 11

Views: 20794

Answers (4)

Rashi Lamba
Rashi Lamba

Reputation: 11

onActivityResult called when .............suppose we have 2 activities and you go from one activity to another and then right now you are in 2nd activity and if you finish second activity then jump back to 1st activity then After onStop, onrestart, onstart, onResume method call then onActivityResult called.

Upvotes: 0

Jatin Bansal
Jatin Bansal

Reputation: 131

onActivityResult, called after onResume,

The basic reason that when your jump from your activity to another activity without calling finish. Then last activity went in onStop state.

After onStop, onstart,onResume method call then onActivityResult called.

Upvotes: 0

nadafafif
nadafafif

Reputation: 671

Please make sure activity your calling is not singleInstance in AndroidManifest file. Make sure that its is singleTop or standard.

Hope this will work for you guys as well

Upvotes: 9

HpTerm
HpTerm

Reputation: 8281

It is a bug of Android

onActivityResult() called prematurely

and

Why does result from startActivityForResult come before activity really starts?

I don't know which version you use and if it has been solved/corrected

Upvotes: 4

Related Questions