0

Je veux changer & enregistrer le texte du bouton onLongClick de manière permanente (jusqu'à & sauf si je le change à nouveau). This est une capture d'écran du code global. Mais quand je ferme l'App & le rouvrir, le texte du bouton reste par défaut. Quelle erreur est-ce que je fais?Modifier & Enregistrer le texte du bouton onLongClick en utilisant les préférences partagées

package com.demo.buttontextedit; 

import android.content.Context; 
import android.content.DialogInterface; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    SharedPreferences sharedPreferences; 
    private Button btn; 
    private EditText edit; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn = (Button) findViewById(R.id.button); 
     edit = (EditText) findViewById(R.id.edit_text); 
     btn.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       showDialog(edit.getText().toString()); 
       return true; 
      } 
     }); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getApplicationContext(), "You clicked Button" + 
         btn.getText().toString(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    private void showDialog(String str) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("input text"); 
     View view = LayoutInflater.from(this).inflate(R.layout.dialog_view, null); 
     final EditText edit_dialog = (EditText) view.findViewById(R.id.edit_dialog); 
     edit_dialog.setText(str); 
     builder.setView(view); 

     builder.setNegativeButton("cancel", null); 
     builder.setPositiveButton("confirm", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       sharedPreferences = getSharedPreferences("myPref", Context.MODE_PRIVATE); 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putString("Name", edit_dialog.getText().toString()); 
       editor.commit(); 
       btn.setText(sharedPreferences.getString("Name", "")); 
      } 
     }); 
     builder.show(); 
    } 
} 
+0

Vous devez mettre à jour le texte de votre bouton 'onCreate()' en fonction de la valeur de sharedpreference. – Rashin

Répondre

3

il vous manque le texte des préférences partagées sur l'activité Oncrete. Solution

mettre ces lignes: si (sharedPreferences.getString ("Nom", "") equals ("")) {

btn.setText("YES"); 

} else {

btn.setText(sharedPreferences.getString("Name", "YES")); 

}

en dessous de cette ligne: btn = (Bouton) findViewById (R.id.button);

0

Le principal problème que je vois est que cette ligne:

btn.setText(sharedPreferences.getString("Name", "YES")); 

est appelé avant que le bouton est initialisé et trouvé dans la vue. Cela provoque la chaîne à définir à un nullpointer qui (si non essayé-attrapé) bloque l'application. Tant que vous définissez le bouton avant de définir le texte, nullpointer et le texte est défini.

btn = (Button) findViewById(R.id.button); 
btn.setText(sharedPreferences.getString("Name", "YES")); 
1

Flux de contrôle causant ce comportement.

vous devez récupérer les données de préférence dans oncreate et le mettre sur le button comme

oncreate(Bundle b) { 
// initialize preference and layout 
String btntext=sharedPreferences.getString("btnkey","Yes") 
btn.setText(btntext); 
} 

donc lorsque l'application est recréée, vous trouverez le stocké text de preference et placez-le sur le bouton et c'est fait.