1

現在、PreferenceFragment を使用して設定画面を作成できます。この画面では、次を使用して設定を割り当てます。

addPreferencesFromResource(R.xml.preferences);

リソース「R.xml.preferences」を使用する代わりに、既に保存した SharedPreferences を使用したいと思います。次に例を示します。

SharedPreferences prefs = this.getActivity().getSharedPreferences("preferences", 0);

addPreferencesFromResource(prefs);

ただし、これは機能しません。これを行うことは可能ですか?もしそうなら、どのように?または、xml ドキュメントを使用する必要がありますか?

4

1 に答える 1

1

私はたまたままったく同じ問題を抱えていましたが、それを理解しました。これが役立つことを願っています。

XML Reouser を使用せずにカスタム設定を追加するには、次の手順を実行する必要があります。

最初に: 設定画面を作成する必要があります。これは、複数の設定を含むことができ、PreferenceFragment または PreferenceActivity にリンクする必要がある「画面」と呼ばれるものです。たとえば、次の PreferenceFragment を考えてみましょう (そして、それが上位のアクティビティに含まれていると考えてください..)

public static class YourPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        PreferenceScreen p = createPreferences();
        this.setPreferenceScreen(p);//Set the PreferenceScreen as the current one on this fragment

        //now bind values, notice we use p.findPreference which means whe look into the preferenceScreen Associated with the PreferenceFragment/Activity
        bindPreferenceSummaryToValue(p.findPreference("some_key"));
    }
}

createPreferences は、ListPreference や CheckboxPreference などのカスタム設定を含む PreferenceScreen を返すメソッドであると考えてください。これは、設定を実際に作成して PreferenceScreen に追加する方法です。

private PreferenceScreen createPreferences()
    {
        PreferenceScreen p =
        getPreferenceManager().createPreferenceScreen(getActivity());

        ListPreference listPref = new ListPreference(getActivity());

        listPref.setKey("some_key"); //Refer to get the pref value
        CharSequence[] csEntries = new String[]{"Item1","Item2"};
        CharSequence[] csValues = new String[]{"1","2"};
        listPref.setDefaultValue(-1);
        listPref.setEntries(csEntries); //Entries(how you display them)
        listPref.setEntryValues(csValues);//actual values
        listPref.setDialogTitle("Dialog title");
        listPref.setTitle("Title");
        listPref.setSummary("Some summary");

        p.addPreference(listPref);

        return p;
    }

これが最も役立つかどうか教えてください。

編集: bindPreferenceSummaryToValue のコード

private static void bindPreferenceSummaryToValue(Preference preference) {
    // Set the listener to watch for value changes.
    preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);

    // Trigger the listener immediately with the preference's
    // current value.


    if (preference instanceof CheckBoxPreference) {
        sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, PreferenceManager.
                getDefaultSharedPreferences(preference.getContext()).
                getBoolean(preference.getKey(),false));

    } else {
        sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, PreferenceManager.
                getDefaultSharedPreferences(preference.getContext()).
                getString(preference.getKey(),""));
    }

}
于 2013-11-07T19:02:14.100 に答える