получи setSilent грешка при опит за внедряване на SharedPreferences за запазване на състоянието на квадратче за отметка

Опитвам се да запазя състоянието на квадратче за отметка, докато използвам SharedPreferences. Прекарах часове в този проблем...който със сигурност е лесен за разрешаване. Следвам урока тук

Въпреки това не разбирам какво е setSilent и какво трябва да го променя в собствения си код. setSilent е променен на отметнат в кода по-долу въз основа на един от отговорите. Търсих много в stackoverflow и намерих купища свързани отговори, но нищо не проработи и грешката 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 запазва състоянието на квадратчето за отметка при изход от приложението. Аз съм начинаещ, затова се извинявам...благодаря предварително!


person theCreed    schedule 14.06.2014    source източник


Отговори (2)


Трябва да създадете променлива на класа, която се променя във вашия onCheckedChangedListener и след това да я запишете в споделени предпочитания във вашия метод onStop().

person Ivan Wooll    schedule 14.06.2014
comment
звучи глупаво, но не разбирам напълно, имате ли пример или връзка към основен пример? - person theCreed; 14.06.2014

В горната част на вашата дейност декларирайте булева променлива, нека я наречем проверена.

Boolean checked;

Добра практика е да инициализирате променлива, така че направете това във вашия метод onCreate.

checked = true;

Във вашия метод onCheckedChanged задайте стойността на 'checked' на true или false в зависимост от състоянието.

@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();
}
person Ivan Wooll    schedule 14.06.2014
comment
благодаря ви много за това, нямах представа как да направя това. Мисля, че все пак трябва да пропускам нещо. Тъй като направих всичко, което поискахте, но... промених setSilent(isChecked); към проверено (isChecked); (което мисля, че трябваше да направя) и проверено (isChecked); все още показва грешка. Актуализирах кода. Благодаря ви много, че ми помогнахте с това - person theCreed; 14.06.2014