尝试实现SharedPreferences以保存复选框的状态时出现setSilent错误

时间:2014-06-14 18:07:14

标签: android checkbox sharedpreferences

我正在尝试在使用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。我是初学者所以我道歉...提前谢谢!

2 个答案:

答案 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();
}