我尝试使用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()函数中
但是有一个问题 该应用程序运行并没有崩溃,但价值仍然没有改变 有什么想法解决这个问题吗?
答案 0 :(得分:0)
Logcat跟踪显示第62行抛出NPE。
boolean onoffSwitch = loadSettings.getBoolean("appOnOff", false);
因此,loadSettings
必须为null。您可以通过以下方式打印:
System.out.print(loadSettings);
所以,你必须尝试:
SharedPreferences loadSettings = getSharedPreferences("pref", Context.MODE_PRIVATE);
...
loadSettings.commit();
答案 1 :(得分:0)
您可能会尝试在保存之前获取共享首选项值。首先检查您是否在共享首选项中保存值。
答案 2 :(得分:0)
这里有几个问题。
首先,您应该将代码从片段的onCreateView()移动到onActivityCreated(),就像保证Activity的onCreate已经完成一样。< / p>
第二个问题是,虽然这可能有效,但设计很差,让片段直接以这种方式进入并操纵它的父母活动。
Android开发者网站有一篇很好的文章,介绍了如何通过接口在http://developer.android.com/training/basics/fragments/communicating.html
通过接口进行片段与其活动之间的通信就个人而言,我更喜欢将内容更多地分离,放弃界面,并使用消息总线(例如Otto,EventBus等)。这样,片段完全可重用/可替换,活动和片段都不需要了解彼此之间的具体内容 - 只是他们发出/消费的总线消息。