EditTextPreferenceアイテムを含む設定フラグメントがあります。プリファレンスフラグメントをロードするたびに、表示される値はデフォルト値であり、sharedPreferencesに保存されている値の1つです。メニューが読み込まれたときに、これらの編集テキストを常にsharedPreferencesからのテキストを表示するようにするにはどうすればよいですか?以下を使用して、フラグメントからsharedPreferencesにアクセスしてみました。
SharedPreferences def = getActivity().getPreferences(0);
Log.v("Something", def.getString("relay1_name", "no"));
しかし、任意のキーにアクセスしようとすると、デフォルトのテキストが返されます。テキスト入力はsharedPreferencesに保存されています。これは、editTextをクリックすると、事前に設定したテキストがすでに存在しているため、要約だけにデフォルトのテキストが表示されるためです。よろしくお願いします。私はおそらく非常に単純なものを見逃しているでしょう。
設定画面のxml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/prefs_relay_title">
<EditTextPreference
android:dialogTitle="Relay1"
android:key="relay1_name"
android:summary="Relay 1"
android:title="Relay 1"
android:defaultValue="Relay 1" />
</PreferenceCategory>
</PreferenceScreen>
フラグメントが作成されるアクションpublicclassPrefsActivity extends Activity {
public static final String PREFS_NAME = "prefs";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); // Load the prefs screen up
}
}
prefsフラグメント自体
public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
//public static final String PREFS_NAME = "prefs";
@Override
public void onCreate(Bundle savedInstanceState) {
Log.v("PrefsFragment", "Creating prefs fragment");
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs_xml);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
void loadDefaults() {
SharedPreferences def = getActivity().getPreferences(0);
Log.v("Something", def.getString("relay1_name", "no"));
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("relay1_name")){
Preference connectionPref = findPreference(key);
connectionPref.setSummary(sharedPreferences.getString(key, ""));
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
}