Inner PreferenceScreen does not open with PreferenceFragmentCompat

前端 未结 7 1508
难免孤独
难免孤独 2020-12-07 21:12

My inner PreferenceScreen of PreferenceFragmentCompat is not showing, or seems to ignore tapping events.

I created MyPreferenceFragment that exten

相关标签:
7条回答
  • 2020-12-07 21:56

    Based on @squirrel Intent solution, I made it work this way. It requires even less hacking.
    Activity:

    import android.support.v7.app.AppCompatActivity;
    
    public class SettingsActivity extends AppCompatActivity {
    
        public static final String TARGET_SETTING_PAGE = "target";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            SettingsFragment settingsFragment = new SettingsFragment();
            Intent intent = getIntent();
            if (intent != null) {
                String rootKey = intent.getStringExtra(TARGET_SETTING_PAGE);
                if (rootKey != null) {
                    settingsFragment.setArguments(Bundler.single(TARGET_SETTING_PAGE, rootKey));
                }
            }
    
            getFragmentManager().beginTransaction()
                    .replace(android.R.id.content, settingsFragment)
                    .commit();
        }
    }
    

    Fragment:

    import android.support.v14.preference.PreferenceFragment;
    
    public class SettingsFragment extends PreferenceFragment {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            Bundle arguments = getArguments();
            if (arguments != null && arguments.getString(TARGET_SETTING_PAGE) != null) {
                setPreferencesFromResource(R.xml.preferences, arguments.getString(TARGET_SETTING_PAGE));
            } else {
                addPreferencesFromResource(R.xml.preferences);
            }
        }
    
        @Override
        public void onNavigateToScreen(PreferenceScreen preferenceScreen) {
            Intent intent = new Intent(getActivity(), SettingsActivity.class)
                    .putExtra(TARGET_SETTING_PAGE, preferenceScreen.getKey());
            startActivity(intent);
    
            super.onNavigateToScreen(preferenceScreen);
        }
    }
    

    It is sad you need so much hacks in the support appcompat libraries for something that works flawlessly out-of-the-box in standard android.

    0 讨论(0)
提交回复
热议问题