I try create PreferenceFragment which must be opened via NavigationDrawer, but it does'nt work normal.
MainActivity.java
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
...
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void setupNavigationDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
mDrawerLayout.closeDrawers();
setTitle(item.getTitle());
switch (item.getItemId()) {
...
case R.id.nav_one:
setFragment(3);
return true;
case R.id.nav_two:
setFragment(4);
return true;
case R.id.nav_settings:
getFragmentManager().beginTransaction()
.replace(R.id.content_main, new SettingFragment())
.commit();
return true;
}
return true;
}
});
}
public void setFragment(int position){
mFragmentTransaction = getSupportFragmentManager().beginTransaction();
Fragment fragment = null;
switch (position){
...
fragment = new OneFragment();
break;
case 4:
fragment = new TwoFragment();
break;
case 5:
break;
}
mFragmentTransaction.replace(R.id.content_main, fragment);
mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
mFragmentTransaction.commit();
}
}
SettingFragment.java
public class SettingFragment extends PreferenceFragment {
public SettingFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
}
And it looks like enter image description here The SettingFragment is inserted on top of the rest fragments and not destroyed after clicking other fragments.
This similar question enter link description here
not helped me.
Does anyone know the solution?
Solution: Use PreferenceFragmentCompat instead PreferenceFragment.