Je veux faire un bouton lorsque je clique dessus une boîte de dialogue apparaît et je lis les données de cette boîte de dialogue. Dans la boîte de dialogue, j'ai seulement EditText pour les données. Mes données sont des nombres. Voici mon code:Impossible de recevoir des données à partir du bouton Listener
Button mSaveButton = (Button) findViewById(R.id.saveButton);
mSaveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder mBuilder = new AlertDialog.Builder(ReportActivity.this);
View mView = getLayoutInflater().inflate(R.layout.dialog_for_percent , null);
EditText savingsDialog = (EditText) mView.findViewById(R.id.percentEditText);
mBuilder.setView(mView)
.setPositiveButton(R.string.done, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Context context = getApplicationContext();
Toast.makeText(context, "Done", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
AlertDialog dialog = mBuilder.create();
dialog.show();
//if (savingsDialog.getText().toString().length() > 0) { I tried this if, but I receive empty data
SharedPreferences savings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = savings.edit();
editor.putString("percent", savingsDialog.getText().toString());
editor.commit();
updateSavingsView(Integer.parseInt(savingsDialog.getText().toString()));// here I want to put my data in method which update my TextView
//}
}
});
Méthode (si vous en avez besoin)
public void updateSavingsView(int savings){
TextView savingsTextView = (TextView) findViewById(R.id.saverTextView);
savingsTextView.setText("Save " + savings + "% per month");
TextView monthlySavings = (TextView) findViewById(R.id.savingsMoney);
if(savings == 0 || Integer.parseInt(income.getText().toString()) == 0) {
monthlySavings.setText("0");
}
else{
monthlySavings.setText(Integer.toString((Integer.parseInt(income.getText().toString()) * savings)/100));
}
Le problème est que quand je lance le programme sans instruction if j'ai un java.lang.NumberFormatException d'erreur: Pour chaîne d'entrée: "". C'est parce qu'il lit une chaîne vide et que vous voulez l'analyser. Ensuite, j'ajoute if instruction pour éviter ce problème mais cela ne fonctionne pas. Et ma question est. Comment je peux réécrire cet écouteur pour éviter ces problèmes et stocker les données correctes?
Je ne peux pas beacuse mon EditText savingsDialog est en dehors et il me donne l'erreur que je déclarer finale – Valgaal
déclarer alors il finale .. pas de problème. fais-le –
Ouais ça marche. Je pensais que ce ne sera pas une réponse si évidente. J'évite les finales .. Mais voici une seule façon – Valgaal