2016-06-04 15 views
1

So möchte ich CheckBox Zustand über SharedPreferences in RecyclerView Adapter Klasse wie folgt speichern:Saving CheckBox Zustand von RecyclerView Adapter Klasse

checkBox.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (checkBox.isChecked()){ 
         title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
         title.setAlpha(0.5f); 
         PreferenceManager.getDefaultSharedPreferences(c).edit().putBoolean("checkBox", checkBox.isChecked()).commit(); 
        } else if (!checkBox.isChecked()){ 
         title.setPaintFlags(0); 
         title.setAlpha(0.8f); 
         PreferenceManager.getDefaultSharedPreferences(c).edit().putBoolean("checkBox", checkBox.isChecked()).commit(); 
        } 
       } 
      }); 

nicht‘Geist der Farbe Fahnen.

Und ich bin das Abrufen der Daten in meiner Tätigkeit wie folgt aus (in onCreate):

checkBox = (CheckBox) findViewById(R.id.checkBoxDoneOrNotNaListi); 
     boolean checked = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("checkBox", false); 
     checkBox.setChecked(checked); 

Und immer Nullpointer

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CheckBox.setChecked(boolean)' on a null object reference 

Was habe ich falsch gemacht?

boolean checked = PreferenceManager.getDefaultSharedPreferences(context).getBoolean("checkBox", false); 
holder.checkBox.setChecked(checked); 

Dann wird Ihr ViewHolder sollte in etwa so aussehen:

+0

Stellen Sie sicher, 'checkBox = (CheckBox) findViewById (R.id.checkBoxDoneOrNotNaListi);' ist nach 'setConentView()' in 'onCreate()' – TychoTheTaco

+0

Es ist nach dem Set Content View – DaxHR

+0

Gut nach dem Fehler 'checkBox' ist gleich 'null'. Haben Sie die ID überprüft, um sicherzustellen, dass sie korrekt ist? – TychoTheTaco

Antwort

-1

In onBindViewHolder() in der Adapter-Klasse, könnten Sie so etwas wie dieses setzen

:

public class ViewHolder extends RecyclerView.ViewHolder{ 
    public CheckBox checkBox; 

    public ViewHolder(View itemView){ 
     super(itemView); 
     checkBox = (CheckBox) itemView.findViewById(R.id.checkBoxDoneOrNotNaListi); 
    } 
} 

Die onClickListener() wie folgt aussehen könnte

checkBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       switch (position){ 
        case 0: 
         PreferenceManager.getDefaultSharedPreferences(c).edit().putBoolean("checkBox0", checkBox.isChecked()).commit(); 
         break; 
        case 1: 
         PreferenceManager.getDefaultSharedPreferences(c).edit().putBoolean("checkBox1", checkBox.isChecked()).commit(); 
         break; 
        ... 
       } 
      } 
     }); 
+0

Nun, ich tat genau das, und in meiner Aktivität verließ den Code, wie es im ersten Post war und immer noch das gleiche NullPointer – DaxHR

+0

Sie müssen den Code in der Aktivität entfernen – TychoTheTaco

+0

Wow, es funktioniert jetzt, aber alle sind standardmäßig überprüft und wenn ich die App neu starte, bleiben sie immer noch überprüft, obwohl ich sie abchecke – DaxHR

0
/** 
* save selected <position, checkBoxState> 
*/ 
private SparseBooleanArray mSelectedItem = new new SparseBooleanArray(listData.size()); 
/** 
* true: allow checkbox change, else otherwise 
* purpose update checkbox state on bind data 
*/ 
private boolean isAllowOnCheckChange = true; 

@onBindViewHolder

isAllowOnCheckChange = false; 
itemHolder.checkBox.setChecked(mSelectedItem.get(position)); 
isAllowOnCheckChange = true; 
itemHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 
       if (isAllowOnCheckChange) 
        mSelectedItem.put(position, isChecked); 
      } 
     }); 

demo

Verwandte Themen