2017-06-19 4 views
0

Ich versuche, den Status der Kontrollkästchen zu speichern und die Kontrollkästchen haben 3 überprüfte Zustände (rot, gelb, grün) in einem Fragment. Ich versuche gemeinsame Einstellungen zu verwenden, aber es wird nicht in der App gespeichert, auch wenn Sie auf verschiedene Registerkarten gehen. Ich habe 4 Fragmente, die von Fragment zu Fragment gehen und endet mit dem 4. Fragment mit den Checkboxen. Sie können mit einem Knopf zum 3. Fragment zurückkehren. Ich muss in der Lage sein, die Checkboxen zu speichern, wenn sie rot, gelb oder grün sind, und wenn der Benutzer irgendwo in die App geht, wenn sie zur Checkliste zurückkehren, wird die Checkbox entweder rot, gelb oder grün sein Wie oft hat die Checkbox geklopft. Es scheint nichts zu speichern und es scheint zurückgesetzt zu werden, wenn ich zu anderen Orten in der App gehe. Hier ist mein Code:Android - Speichern des Status der Kontrollkästchen funktioniert nicht 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); 
     } 
    } 
} 

Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

Antwort

0

Sie verwenden ein falschen Schlüssel aktiviert zu verwenden. An einer Stelle verwenden Sie checkStartId, während Sie in der anderen CheckStartId verwenden. Benutze eins davon, aber nicht beides.

Pro Tipp: Erklären Sie Ihre Schlüssel als endgültige Variablen auf Tippfehler, wie dies zu verhindern:

private static final String CHECK_START_ID = "checkStartId"

Und jetzt, wenn Sie benötigen den Schlüssel, anstatt die Zeichenfolge einzugeben, die String-Variable verwenden

+0

Vielen Dank! Das hat es geschafft! – Karna

0

versuchen editor.commit(); statt editor.apply();

+0

Ich habe das schon ausprobiert und es hat nicht funktioniert. Deshalb ging ich mit bewerben. – Karna

Verwandte Themen