gpt4 book ai didi

android - 无法从 MainActivity 解析 findPreference()?

转载 作者:行者123 更新时间:2023-11-29 14:45:17 25 4
gpt4 key购买 nike

当我尝试在我的 MainActivity 中初始化 OnSharedPreferencesChanged 监听器时,出现编译器错误无法解析方法 findPreference。根据回答here :

findPreference() should be called from a class implementing PreferenceActivity interface

但我不明白执行此操作的代码是什么。我怎样才能摆脱编译器错误并成功地设置监听器以进行首选项更改?

MainActivity.java

 public class MainActivity extends FragmentActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
private SharedPreferences.OnSharedPreferenceChangeListener listener;

@Override
protected void onCreate(Bundle savedInstanceState) {
...
//Test preference menu
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("pref_wood")) {
Preference woodPref = findPreference(key); //COMPILER ERROR HERE
MainActivity.getGLSurfaceView().setTexture("");
// Set summary to be the user-description for the selected value
woodPref.setSummary(sharedPreferences.getString(key, ""));
}
}
}
}
}

最佳答案

findPreference 是一种方法,它是 PreferenceFragmentPreferenceActivity 的一部分 - 这些是实际显示您的首选项屏幕的 fragment/Activity (该 Activity 已弃用,您应该使用 PreferenceFragment)。

您正在尝试在您的 MainActivity 中使用它。这是行不通的,因为 Preference 对象实际上并不存在于此屏幕上(它们存在于另一个通常具有 PreferenceFragment 作为其一部分的 Activity 中)。如果您需要在不是您的首选项屏幕的 Activity 中访问首选项的首选项值,请使用 SharedPreferences,例如:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getBoolean(R.bool.saved_high_score_default);
boolean wood = sharedPref.getBoolean(pref_wood, defaultValue);

您可以查看 documentation进一步的例子。

如果您的 MainActivity 应该是一个显示设置的屏幕,那么您应该重命名它并在其中包含一个首选项 fragment 。

我相信你也会遇到 setSummary 的麻烦,因为 Preference 不是这个 Activity 的一部分,它是你实际修改的 Activity 的一部分优先。 setSummary 用于更新 Preference 的实际 UI,例如,如果您在使用列表首选项时选择三个值之一,它会显示您刚才的值在屏幕上选择。

关于android - 无法从 MainActivity 解析 findPreference()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309391/

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