我正在尝试在使用SharedPreferences时保存复选框的状态。我花了好几个小时来处理这个问题......我肯定很容易解决。我一直在关注教程here
但是,我不明白setSilent是什么以及我必须将其更改为我自己的代码。已根据其中一个答案将setSilent更改为在以下代码中进行了检查。我已经搜索了很多堆栈流并找到了大量相关的答案,但没有任何工作,并且setSilent(有时是一个不同的名称)错误始终是持久的。我在下面发布了我的代码。
SuikodenFragment.java - 错误就在这里。
Boolean checked;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.suikoden_main_activity1, container, false);
// you can use findViewById() using the above 'view'
// get the listview
expListView = (ExpandableListView) view.findViewById(R.id.suikodenList1);
// preparing list data
prepareListData();
listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild);
// setting list adapter
expListView.setAdapter(listAdapter);
checked = true;
return view;
}
public void onStart() {
super.onStart(); // Always call the superclass method first
SharedPreferences settings = getActivity().getSharedPreferences(suikodenprefs, Context.MODE_PRIVATE);
boolean isChecked = settings.getBoolean("Tick the Box", checked);
checked(isChecked);
//if(isChecked)
//checkBox.setChecked(true);
}
下面的代码放置了可能有助于理解我的问题的复选框状态。
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
CheckBox checkBox = (CheckBox) expListView.findViewById(R.id.checkboxTick);
checkBox.setOnCheckedChangeListener(this);
if (isChecked)
// Add the tick to the box
//Log.d(TAG, "Tick the box");
checked = true;
else
// Remove the tick in the box
//Log.d(TAG, "Untick the box");
checked = false;
}
@Override
public void onStop(){
super.onStop();
SharedPreferences settings = getActivity().getSharedPreferences(suikodenprefs, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("Tick the Box",checked).commit();
}
我真的希望有人可以帮忙解决这个问题。这可能看起来像一个愚蠢的问题,但如果它可以解决,那么我可以完成我的应用程序的一大部分。以下链接最接近我自己的代码...但是当我实现他们的解决方案时,checkBoxView标记为错误Android saving state of checkbox if exit app。我是初学者所以我道歉...提前谢谢!
答案 0 :(得分:0)
您需要创建一个在onCheckedChangedListener中更改的类变量,然后将其保存在onStop()方法的共享首选项中。
答案 1 :(得分:0)
在活动的顶部声明一个布尔变量,让我们调用它。
Boolean checked;
初始化变量是一种很好的做法,所以在onCreate方法中这样做。
checked = true;
在您的onCheckedChanged方法中设置'已检查'根据国家的不同而变为真或假。
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
CheckBox checkBox = (CheckBox) expListView.findViewById(R.id.checkbox_tick);
checkBox.setOnCheckedChangeListener(this);
if (isChecked)
checked = true;
else
checked = false;
}
在onStop方法中保存已检查变量的值。
@Override
public void onStop(){
super.onStop();
SharedPreferences settings=getActivity().getSharedPreferences(suikodenprefs,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("Tick the box",checked).commit();
}