I'm quite new to Android development, and I've looked at the similar posts but I still can't get this to work. I can't retrieve SharedPreferences when specifying a preference file, which I try to do in PrefFragment and that's where SharedPreferences.getAll().size() returns 0. 
src/main/res/xml/things.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
                  xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory app:title="things_category">
        <SwitchPreference
                app:key="thing"
                app:title="thing"
                />
        <Preference
                app:fragment="org.thing.appo.PrefFragment2"
                app:key="more_things_menu"
                android:title="more things menu"/>
    </PreferenceCategory>
</PreferenceScreen>
src/main/res/xml/more_things.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
                  xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference
            app:key="more_things"
            app:title="more things"
            />
</PreferenceScreen> 
src/main/res/values/strings.xml
<resources>
    <string name="app_name">appo</string>
    <string name="things">things</string>
    <string name="more_things">more_things</string>
</resources>
MainActivity
public class MainActivity extends AppCompatActivity implements
        PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (findViewById(R.id.fragment_container) != null) {
            if (savedInstanceState != null) {
                return;
            }
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.fragment_container, new PrefFragment())
                    .commit();
        }
    }
    @Override
    public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
        final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate(
                getClassLoader(),
                pref.getFragment());
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, fragment)
                .addToBackStack(null)
                .commit();
        return true;
    }
}
PrefFragment
public class PrefFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String key) {
        setPreferencesFromResource(R.xml.things, key);
        Map<String, ?> things = getActivity().getSharedPreferences(getString(R.string.things), Context.MODE_PRIVATE).getAll();
        System.out.println("things.size() = " + things.size()); // returns 0
        Map<String, ?> moreThings = getActivity().getSharedPreferences(getString(R.string.more_things), Context.MODE_PRIVATE).getAll();
        System.out.println("moreThings = " + moreThings.size()); // returns 0
        Map<String, ?> all = PreferenceManager.getDefaultSharedPreferences(getActivity()).getAll();
        System.out.println("all.size() = " + all.size()); // But here it returns 2
    }
}
PrefFragment2
public class PrefFragment2 extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String key) {
        setPreferencesFromResource(R.xml.more_things, key);
    }
}
