Preference sub-screen not opening when using support.v7.preference

前端 未结 5 687
青春惊慌失措
青春惊慌失措 2020-12-09 15:59

I am trying to implement preferences with sub-screens using AppCompatActivity and support.v7.preference

According to the docs, every PreferenceScreen within another

5条回答
  •  萌比男神i
    2020-12-09 16:09

    It looks like a bug in PreferenceFragmentCompat or insufficiency of docs. It has method onNavigateToScreen which is called when you click on PreferenceScreen item.

    But method getCallbackFragment() returns null by default, so you need override it in your fragment to return this. Also you need to implement PreferenceFragmentCompat.OnPreferenceStartScreenCallback.

    public class SettingsFragment extends PreferenceFragmentCompat implements PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
    
        public static SettingsFragment newInstance() {
            return new SettingsFragment();
        }
    
        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            addPreferencesFromResource(R.xml.news_settings);
        }
    
        @Override
        public Fragment getCallbackFragment() {
            return this;
        }
    
        @Override
        public boolean onPreferenceStartScreen(PreferenceFragmentCompat preferenceFragmentCompat, PreferenceScreen preferenceScreen) {
            preferenceFragmentCompat.setPreferenceScreen(preferenceScreen);
            return true;
        }
    }
    

    But it leads to another problem when you can't get back to your initial PreferenceScreen,

    Another way is to replace fragment which is described here How to move back from Preferences subscreen to main screen in PreferenceFragmentCompat?

提交回复
热议问题