Created
July 9, 2020 09:00
-
-
Save erickok/61444c8264b6c9c604ca3ef6d4ae8062 to your computer and use it in GitHub Desktop.
androidx-compatible PreferenceActivity
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package nl.nl2312.example; | |
import android.os.Bundle; | |
import androidx.annotation.XmlRes; | |
import androidx.appcompat.app.AppCompatActivity; | |
import androidx.appcompat.app.AppCompatCallback; | |
import androidx.preference.Preference; | |
import androidx.preference.PreferenceFragmentCompat; | |
import androidx.preference.PreferenceManager; | |
import androidx.preference.PreferenceScreen; | |
public class PreferenceCompatActivity extends AppCompatActivity implements AppCompatCallback, PreferenceFragmentCompat.OnPreferenceStartScreenCallback { | |
private PreferenceFragmentCompat fragment; | |
public void addPreferencesFromResource(@XmlRes int preferencesResId) { | |
fragment = new RootPreferencesFragment(preferencesResId); | |
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commitNow(); | |
} | |
public PreferenceManager getPreferenceManager() { | |
return fragment.getPreferenceManager(); | |
} | |
public PreferenceScreen getPreferenceScreen() { | |
return fragment.getPreferenceScreen(); | |
} | |
public Preference findPreference(CharSequence key) { | |
return fragment.findPreference(key); | |
} | |
@Override | |
public boolean onPreferenceStartScreen(PreferenceFragmentCompat caller, PreferenceScreen pref) { | |
LowerPreferencesFragment lowerFragment = new LowerPreferencesFragment(pref); | |
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, lowerFragment).addToBackStack("lower").commit(); | |
return true; | |
} | |
public static class RootPreferencesFragment extends PreferenceFragmentCompat { | |
private int preferencesResId; | |
public RootPreferencesFragment(int preferencesResId) { | |
this.preferencesResId = preferencesResId; | |
} | |
@Override | |
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { | |
addPreferencesFromResource(preferencesResId); | |
} | |
} | |
public static class LowerPreferencesFragment extends PreferenceFragmentCompat { | |
private PreferenceScreen prefs; | |
public LowerPreferencesFragment() { | |
} | |
public LowerPreferencesFragment(PreferenceScreen prefs) { | |
this.prefs = prefs; | |
} | |
@Override | |
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { | |
if (prefs != null) { | |
setPreferenceScreen(prefs); | |
prefs = null; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment