PreferenceFragment через NavigationDrawer - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать PreferenceFragment, который должен быть открыт через NavigationDrawer, но он не работает нормально.

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

И это выглядит как введитеописание изображения здесь SettingFragment вставляется поверх остальных фрагментов и не уничтожается после нажатия других фрагментов.

Этот похожий вопрос введите описание ссылки здесь

непомог мне.

Кто-нибудь знает решение?

Решение : используйте PreferenceFragmentCompat вместо PreferenceFragment.

...