1

ich erstellen möchten Inhalt Anwendung speichern, i Daten aus JSON laden und wenn Benutzer auf button diesen Inhalt in SQLitedatabase speichern klicken.
Ich möchte this library für die Schaltfläche verwenden.
Und überprüfbaren Taste, verwende ich this CodeWie Knopf Staat in SharedPreferences in Android

I unten Codes schreiben, wenn Klick auf den Button speichern i diesen Inhalt in SQLitedatabase, aber ich kann nicht Taste sate in SharedPreferences sparen!

Wenn Klick auf den Button (boolean checked) Taste ist wiederum auf, und wenn klicken Sie erneut auf die Schaltfläche diese Taste deaktivieren.

ich will, wenn Klick auf den Button, auf diesen Knopf drehen und zu anderen activity in SharedPreferences und wenn gehen speichern und wieder zurück diese activity finden wiederum auf diese Schaltfläche NICHT auszuschalten. Wenn Sie zu diesem Zeitpunkt erneut auf diese Schaltfläche klicken, klicken Sie auf Schaltfläche!

Tätigkeitskodes:

private ShineButton postShow_favPost; 
private String favData = "FavPrefsList"; 
private Boolean favState; 

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.post_show_page); 

    bindActivity(); 

    //Give Data 
    Bundle bundle = getIntent().getExtras(); 

    if (bundle != null) { 
     title = bundle.getString("title"); 
     image = bundle.getString("image"); 
     content = bundle.getString("content"); 
     dateTime = bundle.getString("dateTime"); 
     author = bundle.getString("author"); 
     category = bundle.getString("category"); 
     categoryID = bundle.getString("categoryID"); 
    } 

    mAppBarLayout.addOnOffsetChangedListener(this); 

    //// Save Fav state 
    final SharedPreferences saveFavPrefs = getSharedPreferences(favData, MODE_PRIVATE); 
    final SharedPreferences.Editor editor = saveFavPrefs.edit(); 

    favState = saveFavPrefs.getBoolean("isChecked", false); 

    postShow_favPost = (ShineButton) mToolbar.findViewById(R.id.post_FavImage); 
    postShow_favPost.init(this); 
    postShow_favPost.setOnCheckStateChangeListener(new ShineButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(View view, boolean checked) { 

      if (checked == true) { 
       editor.putBoolean("isChecked", true); 
       editor.commit(); 

       //////////// Database 
       favDB = new FavHelper(context); 

       long addNewFAV = favDB.insertFAV(title, image, content, dateTime, author, category); 

       if (addNewFAV < 0) { 
        TastyToast.makeText(context, "Not save in database", TastyToast.LENGTH_LONG, TastyToast.ERROR); 
       } else { 
        TastyToast.makeText(context, "Save in database", TastyToast.LENGTH_LONG, TastyToast.SUCCESS); 
       } 

       //////////////////// 
      } else { 
       editor.putBoolean("isChecked", false); 
       editor.commit(); 
       Toast.makeText(context, "Checked False", Toast.LENGTH_SHORT).show(); 
      } 

     } 
    }); 

Wie kann ich mein Problem zu beheben?

+0

versuchen .commit() mit .apply() für asynchronen Prozess zu ersetzen. – Lazai

+0

@Lazai, ich benutze '.apply();' in ** wenn ** und ** sonst ** Code, aber nicht arbeiten mich :(.und wenn zurück zu Aktivität, siehe Abschaltknopf :( –

+0

@Lazai, können Sie mir für unten Post mein Freund helfen? –

Antwort

0

Nun, Sie müssen den Zustand speichern, wenn Sie auf die Schaltfläche klicken. Zum Beispiel:

postShow_favPost.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (postShow_favPost.isChecked()){ 
      editor.putBoolean("isChecked", true); 
      editor.apply(); 
    } 
    else{ 
     editor.putBoolean("isChecked", false); 
     editor.apply(); 
     } 
    } 
}); 

Dann haben Sie es in Ihrem onCreate() zu laden:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    SharedPreferences saveFavPrefs = getSharedPreferences(favData, MODE_PRIVATE);; 
    postShow_favPost.setChecked(saveFavPrefs.getBoolean("isChecked", true)); 
} 

Vielleicht wird dieses Beispiel Ihnen helfen.

EDIT

Ok wir in Ihrer f Funktion nehme an, Sie gerade zu Ende zu tun, was Sie zu Ihrer Datenbank tun, danach, den Staat als auf oder off gesetzt, lassen Sie uns sagen, Sie wollen unter.

So:

public void loadPrefs(SharedPreferences prefs){ 
    favState = prefs.getBoolean("isChecked",false); 
} 


public void f(SharedPreferences.Editor editor){ 
//database stuff 
editor.putBoolean("isChecked", true); // or false 
editor.apply(); 

loadPrefs(prefs); 

// hier Ihr Zustand wird so schnell für den Button gespeichert werden, wie Sie Finish mit Ihrer Datenbank arbeiten, danach in Ihrem onResume() Sie ändern können, dass Zustand auf false (off) im Fall, dass Sie es just for that post

} 
+0

Danke für Ihre Hilfe mein Freund, aber wenn diese Code-Show einschalten für alle Beiträge: D. aber Ich möchte, wenn Sie auf diese Schaltfläche klicken, und sqlite zu diesem Zeitpunkt speichern, schalten Sie auf diese Schaltfläche nur für den Beitrag nicht alle Beiträge! –

+0

Können Sie mir helfen? bitte <3 –

+0

Nun, ich bin mir nicht sicher, ich folge, was du bist Nachdem Sie den Zustand für eine Schaltfläche in sharedPrefs gespeichert haben, überprüft er seinen Wert, wann immer Sie ihn überprüfen möchten, in dem Beispiel, in dem Sie ihn onCreate() einchecken. Versuchen Sie es vielleicht, wenn Sie die Datenbank nicht mehr benötigen , benutze den Editor, um den Status der Schaltfläche als false zu speichern und dann einen Callback zu erstellen, um die Einstellung erneut zu laden (dieses Mal als false -> schaltet den Button aus) – Lazai