Java – rise from preferencearag and preferencefragments using optionsitemselected
I'm having trouble using optionsitemselected when using Android studio's default set activity (extended appcompatpreferenceactivity) Important parts of the activity are:
public class SettingsActivity extends AppCompatPreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupActionBar(); } private void setupActionBar() { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { // Show the Up button in the action bar. actionBar.setDisplayHomeAsUpEnabled(true); } } public static class GeneralPreferenceFragment extends PreferenceFragment { // [...] @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { startActivity(new Intent(getActivity(),SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } } // two more fragments }
This is useful for clips – onoptionsitemselected @ overrides works well and returns to settingsactivity, but when using the up button, I want settingsactivity to return control to its parent activity
I've read the document and I understand
This means that I can't simply add a similar @ override (using a different intent) to the settingsactivity itself to handle the situation I want, so as not to return the fragment to the parent activity
I tried Android manifest XML handles this:
<activity android:name=".SettingsActivity" android:label="@string/title_activity_settings" android:parentActivityName=".BlahBlahActivity" > <Meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.appthing.BlahBlahActivity" /> </activity>
But it doesn't seem to do anything at all
If so, what is a good way to deal with this problem?
Solution
It belongs to a fragment in the template created by the Android studio optionsitemselected method
I solved this by commenting on them and writing the onoptionsitemselected method for the activity that overrides onbackpressed
@Override public void onBackPressed() { super.onBackPressed(); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { onBackPressed(); return true; } return super.onOptionsItemSelected(item); }