0

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.

TimWeb
  • 395
  • 1
  • 3
  • 17
  • `getFragmentManager()`, `getSupportFragmentManager()` – You're using two different `FragmentManager`s. They are not going to replace or remove each other's `Fragment`s. These days, you should be using only support library `Fragment`s. – Mike M. Nov 29 '18 at 10:33
  • @MikeM. yes, but getSupportFragmentManager() required android.support.v4.app.Fragment, but my Fragment extends PreferenceFragment – TimWeb Nov 29 '18 at 10:41
  • Change it to extend [`PreferenceFragmentCompat`](https://developer.android.com/reference/android/support/v7/preference/PreferenceFragmentCompat) instead. – Mike M. Nov 29 '18 at 10:43
  • Also, I can't really tell what you're trying to do with `SettingFragment`, but it's just immediately replacing itself with `MyPreferenceFragment`, so it's rather pointless. Was that just an attempt at a fix? – Mike M. Nov 29 '18 at 10:52
  • @MikeM. Ok. I edited code. So it happend due to different FragmentManager? Now i will try change it to PreferenceFragmentCompat and see what happens. – TimWeb Nov 29 '18 at 11:09
  • 1
    @MikeM. I changed to PreferenceFragmentCompat and it works. Thank you very much. – TimWeb Nov 29 '18 at 11:31

0 Answers0