Android: aktivieren.isChecked() ist immer die Rückgabe einer falschen Bedingung
Ich versuche code eine checkbox in ein Hilfe-Bildschirm ist im wesentlichen ein pop-up-anzeigen, (eine Tätigkeit, die begann, indem Sie das Hauptprogramm), die eine ScrollView, die hat den Hilfe-text, und den OK-button und eine checkbox, die fragt, ob Sie möchten, die Hilfe-Bildschirm erscheint automatisch beim start des Programms. Alles zeigt korrekt auf dem Bildschirm angezeigt, und die checkbox schaltet, wenn man Sie berührt. Allerdings, wenn OK gedrückt wird, und ich Teste den Zustand der checkbox mit .isChecked() ich bin immer ein false. Ich bin sicher, es ist einfach etwas, die ich verpasst habe. XML-Datei folgt folgt:
helpdialog.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:background="#ffffff">
<ScrollView android:id="@+id/ScrollView01"
android:layout_width="wrap_content" android:layout_below="@+id/ImageView01"
android:layout_height="300px">
<TextView android:text="@+id/helpView" android:id="@+id/helpView"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:textColor="#000000"/>
</ScrollView>
<Button android:id="@+id/Button01"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true" android:text=" OK "
android:layout_below="@id/ScrollView01"/>
<CheckBox android:id="@+id/chkNoHelp" android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Don't Display at Startup"
android:layout_below="@id/Button01" />
</RelativeLayout>
HelpBox.java:
public class HelpBox extends Activity {
CheckBox checkBox;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//set up dialog
Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.helpdialog);
dialog.setTitle("Help");
dialog.setCancelable(true);
//set up text
TextView text = (TextView) dialog.findViewById(R.id.helpView);
text.setText(getString(R.string.help_text));
//set up button
Button button = (Button) dialog.findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Boolean mDisplayHelp;
setContentView(R.layout.helpdialog);
checkBox = (CheckBox) findViewById(R.id.chkNoHelp);
if (checkBox.isChecked()) {
mDisplayHelp = true;
} else {
mDisplayHelp = false;
}
finish();
}
});
//now that the dialog is set up, it's time to show it
dialog.show();
}
}
Haltepunkte auf beiden "mDisplayHelp" Linien bricht immer an der 'false' - Zweig unabhängig davon, ob das Kontrollkästchen zeigt ein grünes Häkchen oder nicht, wenn die OK Schaltfläche gedrückt wird.
Vielen Dank im Voraus.
Bearbeiten (10/10):
Seiner klaren, was ich will zu tun ist, Holen Sie sich Informationen, nachdem der Benutzer beendet den dialog, so kann ich Einblick in den Status der checkbox und speichern Sie es als eine Voreinstellung. Für dieses ich nehme an, ich habe um es zu testen in onDestory. So, ich hab das:
@Override
public void onDestroy() {
Boolean mDisplayHelp;
setContentView(R.layout.helpdialog);
checkBox = (CheckBox) findViewById(R.id.chkNoHelp);
if (checkBox.isChecked()) {
mDisplayHelp = true;
} else {
mDisplayHelp = false;
}
}
Allerdings bin ich noch immer mit FALSE als Ergebnis, unabhängig davon, ob das Kontrollkästchen anzeigen aktiviert oder deaktiviert. In diesem Beispiel, wenn ich don'; t die setContentView, bekomme ich eine NullPointerException auf die isChecked.
- Warum sind Sie die Einstellung der contentView zweimal?
- Mangel an Verständnis oder Erfahrung, denke ich. Noch kann nicht machen diese Arbeit, wie ich denke, es sollte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum rufst du setContentView ein zweites mal? Nach dem zweiten mal, wenn Sie es nennen, Ihre checkbox wird reset deaktiviert (Standardeinstellung), und Sie sind dann sofort prüfen Ihren Zustand, um ein flag zu setzen.
Seine nicht klar, was deine Absicht ist hier durch aufblasen helpdialog.xml zweimal, einmal in einem Dialog und einmal in Ihre Haupttätigkeit. Es klingt wie Sie verwenden möchten ein dialog-Themen-Aktivität, die hier und nur Aufruf setContentView() einmal im onCreate. Es sollten sich so Verhalten wie erwartet nach, dass.
Endlich fand ich das, und junge war ich über Dinge in die falsche Richtung. Kreide es bis zu Lernkurve.
Was ich tun musste, um speichern Sie die checkbox-Zustand. Ich brauchte, um SharedPreferences für, die. Ich brauchte, um zu erkennen, wenn die checkbox rührte mit einem Hörer darauf und speichern Sie anschließend die Präferenz in dieser Zeit. Beim öffnen des Hilfe-Kasten, lade ich den Vorzug Staat, und legen Sie die Kontrollkästchen für die diesem Staat, so zeigt es korrekt auf der Grundlage der Benutzer die Vorherige-Einstellung.
Anschließend laden Sie die Präferenz im onCreate auf die Haupttätigkeit und rufen Sie die showHelpBox (), wenn die Präferenz war so eingestellt.
In onCreate der Haupttätigkeit:
In der Hilfe-box Tätigkeit pre-initialisieren Sie das Kontrollkästchen basierend auf der vorherigen Einstellung:
Bei checkbox berührt:
Hoffentlich können andere lernen aus meinem törichten Fehler und Missverständnisse.