不能使用 SharedPreference 变量
Can't use SharedPreference variables
我正在尝试使用 SharedPreferences 保存和检索数据。
数据存储和检索正确,问题是应用程序在使用此数据更改 片段
中的按钮文本时崩溃
onCreateView() 函数
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
SharedPreferences loadSettings = getActivity().getSharedPreferences("app_setts", Context.MODE_PRIVATE);
Button counterBtn = (Button) getActivity().findViewById(R.id.counterBtn);
int countInt = loadSettings.getInt("counter",0);
counterBtn.setText(String.valueOf(countInt));
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
那么如何使用 SharedPreference 更改开关值
*我在这里搜索过,但都给出了崩溃
对不起英语不好
编辑
我发现我无法通过 MainActivity.java 中的 onCreate() 直接访问片段组件,所以我必须将我的代码放在 onCreateView() 函数中
但是有个问题
应用程序运行并没有崩溃,但值仍然不会改变
有解决这个问题的想法吗??
Logcat 跟踪显示第 62 行抛出 NPE。
boolean onoffSwitch = loadSettings.getBoolean("appOnOff", false);
因此,loadSettings
必须为空。您可以通过以下方式打印:
System.out.print(loadSettings);
所以,你一定要试试:
SharedPreferences loadSettings = getSharedPreferences("pref", Context.MODE_PRIVATE);
...
loadSettings.commit();
您可能会在保存前尝试获取共享偏好值。首先检查您是否在共享首选项中保存了值..
这里有几个问题。
首先,您可能应该将代码从片段的 onCreateView() 移动到 onActivityCreated(),因为那时您可以保证 Activity 的 onCreate 已完成.
第二个问题是,虽然这可能有效,但让片段以这种方式直接进入并操纵它的父级 activity 是糟糕的设计。
Android 开发者网站上有一篇很好的文章,介绍如何通过接口在片段和 activity 之间进行通信,网址为 http://developer.android.com/training/basics/fragments/communicating.html
个人更喜欢解耦,放弃接口,使用消息总线(例如Otto,EventBus等),这样fragments是完全可重用/可替换的,activity 片段也不需要了解彼此的任何具体信息 - 只是它们发出/使用哪些总线消息。
我正在尝试使用 SharedPreferences 保存和检索数据。
数据存储和检索正确,问题是应用程序在使用此数据更改 片段
onCreateView() 函数
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
SharedPreferences loadSettings = getActivity().getSharedPreferences("app_setts", Context.MODE_PRIVATE);
Button counterBtn = (Button) getActivity().findViewById(R.id.counterBtn);
int countInt = loadSettings.getInt("counter",0);
counterBtn.setText(String.valueOf(countInt));
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
那么如何使用 SharedPreference 更改开关值
*我在这里搜索过,但都给出了崩溃
对不起英语不好
编辑
我发现我无法通过 MainActivity.java 中的 onCreate() 直接访问片段组件,所以我必须将我的代码放在 onCreateView() 函数中
但是有个问题
应用程序运行并没有崩溃,但值仍然不会改变
有解决这个问题的想法吗??
Logcat 跟踪显示第 62 行抛出 NPE。
boolean onoffSwitch = loadSettings.getBoolean("appOnOff", false);
因此,loadSettings
必须为空。您可以通过以下方式打印:
System.out.print(loadSettings);
所以,你一定要试试:
SharedPreferences loadSettings = getSharedPreferences("pref", Context.MODE_PRIVATE);
...
loadSettings.commit();
您可能会在保存前尝试获取共享偏好值。首先检查您是否在共享首选项中保存了值..
这里有几个问题。
首先,您可能应该将代码从片段的 onCreateView() 移动到 onActivityCreated(),因为那时您可以保证 Activity 的 onCreate 已完成.
第二个问题是,虽然这可能有效,但让片段以这种方式直接进入并操纵它的父级 activity 是糟糕的设计。
Android 开发者网站上有一篇很好的文章,介绍如何通过接口在片段和 activity 之间进行通信,网址为 http://developer.android.com/training/basics/fragments/communicating.html
个人更喜欢解耦,放弃接口,使用消息总线(例如Otto,EventBus等),这样fragments是完全可重用/可替换的,activity 片段也不需要了解彼此的任何具体信息 - 只是它们发出/使用哪些总线消息。