2017-06-19 3 views
0

J'essaie de sauvegarder l'état des cases à cocher et les cases à cocher ont 3 états vérifiés (rouge, jaune, vert) dans un fragment. J'essaie les préférences partagées, mais cela ne permet pas d'économiser dans l'application, même lorsque j'utilise différents onglets. J'ai 4 fragments qui vont de fragment en fragment et se termine avec le 4ème fragment avec les cases à cocher. Vous pouvez revenir au 3ème fragment avec un bouton. Je dois pouvoir cocher les cases si elles sont rouges, jaunes ou vertes, et quand l'utilisateur va n'importe où dans l'application, quand il revient à la liste de contrôle, la case à cocher sera rouge, jaune ou verte selon combien de fois la case à cocher. Il semble ne rien sauver, et il semble être réinitialiser quand je vais à d'autres endroits dans l'application. Voici mon code:Android - Enregistrer l'état des cases à cocher ne fonctionne pas sharedpreferences

public class CheckListGatherFragment extends Fragment{ 
    private CheckBox chkStart; 
    private int countStart; 
    private int start; 
    private SharedPreferences mSharedPreferences; 
    private SharedPreferences.Editor editor; 
    private Button btnGoBackToCheck; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View rootView = inflater.inflate(R.layout.fragment_checklist_gather, container, false); 
     chkStart = (CheckBox) rootView.findViewById(R.id.chkStart); 
     btnGoBackToCheck = (Button) rootView.findViewById(R.id.btnGoBackToChecklist); 

     mSharedPreferences = CheckListGatherFragment.this.getActivity().getSharedPreferences("preferences_key", Context.MODE_PRIVATE); 
     editor = mSharedPreferences.edit(); 

     setOnClick(); 

     return rootView; 
    } 

    public void setOnClick() { 
     btnGoBackToCheck.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      getFragmentManager().beginTransaction().replace(R.id.fragment_checklist_gather, new CheckListScreenMainFragment()).addToBackStack("Gather").commit(); 
      } 
     }); 
     chkStart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       countStart = checked(chkStart, countStart); 
       editor.putInt("checkStartId", countStart); 
       editor.apply(); 
      } 
     }); 
    } 

    public int checked(CheckBox checkBox, int count){ 
     if (checkBox.isChecked()){ 
      count++; 
     } else if (!checkBox.isChecked()){ 
      checkBox.setChecked(true); 
      count++; 
     } 
     if (count == 1){ 
      checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox); 
     } 
     if (count == 2){ 
      checkBox.setButtonDrawable(R.drawable.custom_green_checkbox); 
     } 
     if (count > 2){ 
      count = 0; 
      checkBox.setButtonDrawable(R.drawable.custom_red_checkbox); 
     } 
     return count; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     start = mSharedPreferences.getInt("CheckStartId", 0); 
     if (start == 0){ 
      chkStart.setButtonDrawable(R.drawable.custom_red_checkbox); 
     }if (start == 1){ 
      chkStart.setButtonDrawable(R.drawable.custom_yellow_checkbox); 
     }if (start == 2){ 
      chkStart.setButtonDrawable(R.drawable.custom_green_checkbox); 
     } 
    } 
} 

Toute aide serait grandement appréciée. Merci!

Répondre

0

Vous utilisez une clé à tort en majuscules. Dans un endroit vous utilisez checkStartId tandis que dans l'autre vous utilisez CheckStartId. Utilisez l'un d'entre eux, mais pas les deux.

pointe Pro: Déclarez vos clés en tant que variables finales sur le dessus pour éviter les fautes de frappe comme ceci:

private static final String CHECK_START_ID = "checkStartId"

Et maintenant, quand vous avez besoin de la clé, au lieu de taper la chaîne utilise la variable chaîne

+0

Merci beaucoup! C'est ce que j'ai fait! – Karna

0

essayer d'utiliser editor.commit(); au lieu de editor.apply();

+0

J'ai déjà essayé et ça n'a pas marché. C'est pourquoi je suis allé avec appliquer. – Karna