user14536109
user14536109

Reputation:

How to call onActivityResult() from inside Preference Fragment?

I don't know if this is already answered. Say I call startActivityForResult() from inside a Preference Fragment and then also use onActivityResult() inside this Preference Fragment:

public class MyActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_activity);
        if (savedInstanceState == null) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.settings, new SettingsFragment())
                    .commit();
        }
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }

    public static class SettingsFragment extends PreferenceFragmentCompat {
        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            setPreferencesFromResource(R.xml.my_preferences, rootKey);
            ...

            startActivityForResult(intent, 1);

            ...
        }

        @Override
        public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data); //should this line be commented?
            if (requestCode == 1)
                if (resultCode == RESULT_OK) {
                    Toast.makeText(getContext(), "peepeepoopoo", Toast.LENGTH_LONG).show();
                }
        }

    }

}

Should super.onActivityResult(requestCode, resultCode, data); be called in this case?

Upvotes: 1

Views: 95

Answers (1)

Md Imtiaz Hossain
Md Imtiaz Hossain

Reputation: 166

It should be kept as it is without commenting out:

super.onActivityResult(requestCode, resultCode, data);

The code inside the super method is :

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

    mPreferenceManager.dispatchActivityResult(requestCode, resultCode, data);
}

So, yes, there is a difference.

Upvotes: 1

Related Questions