gpt4 book ai didi

android - 加载android时EditTextPreference总是显示默认摘要

转载 作者:太空狗 更新时间:2023-10-29 14:25:38 26 4
gpt4 key购买 nike

我有一个首选项 fragment ,上面有一些 EditTextPreference 项。每次我加载首选项 fragment 时,显示的值都是默认值和存储在 sharedPreferences 中的值。我怎样才能让这些编辑文本在菜单加载时始终显示来自 sharedPreferences 的文本?我尝试使用以下方法从 fragment 访问 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>

创建 fragment 的 Action 公共(public)类 PrefsActivity 扩展 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 fragment 本身

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);
}

}

最佳答案

我认为 PreferenceScreen 使用应用程序默认共享首选项,而您的 fragment 使用 getActivity().getPreferences()

查看 Activity 文档中的 getPreferences(),它不会检索应用程序共享的首选项,而是检索特定 Activity 私有(private)的首选项。我认为这与 PreferenceScreen 存储的内容不同。

我可能会建议你更换

SharedPreferences def = getActivity().getPreferences(0);

SharedPreferences def = PreferenceManager.getDefaultSharedPreferences();

看看是否有帮助。

关于android - 加载android时EditTextPreference总是显示默认摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com