Andere Klasse soll Checkbox prüfen und Aktion ausführen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Andere Klasse soll Checkbox prüfen und Aktion ausführen

    Guten Abend,

    ich schreibe zur Zeit an einer App, die als so eine Art Anzeige verschiedener kleiner Texte fungiert.
    Nun will ich Optionen einbauen, wie zum Beispiel vibrieren, wenn Buttons gedrückt werden.

    Bei der Klasse Einstellungen mit dem Button btnZurueck (Zeile 9 bis 15) funktioniert das auch wunderbar:

    Quellcode

    1. public class Einstellungen extends AppCompatActivity implements View.OnClickListener {
    2. CheckBox vibrationCheckbox;
    3. //Hier steht zwar noch Code, ist aber hier nicht wichtig\\
    4. switch (v.getId()) {
    5. case R.id.btnZurueck:
    6. if (vibrationCheckbox.isChecked()) {
    7. ownVibrator(); //eigene Methode in dieser Klasse
    8. }
    9. finish();
    10. break;
    11. case R.id.btnEgal:
    12. //Dieser Button ist egal
    13. break;
    14. }}}
    Alles anzeigen

    Bei der zweiten Klasse besteht allerdings folgendes Problem:
    Sobald ich den Button btnEinstellungen (Zeile 12 bis 20) drücke und ich auf die Checkbox in den Einstellungen zugreife, stürtzt das Programm ab:

    Quellcode

    1. public class Hauptmenu extends AppCompatActivity implements View.OnClickListener {
    2. Button btnEinstellungen;
    3. //Hier steht zwar noch Code, ist aber hier nicht wichtig\\
    4. Einstellungen test = new Einstellungen();
    5. CheckBox test2 = (CheckBox) test.vibrationCheckbox;
    6. //Hier steht zwar noch Code, ist aber hier nicht wichtig\\
    7. case R.id.btnEinstellungen:
    8. if(test2.isChecked()) {
    9. vibrieren(); //eigene Methode in dieser Klasse
    10. }
    11. Intent j = new Intent(Hauptmenu.this, Einstellungen.class);
    12. startActivity(j);
    13. break;
    14. }}}
    Alles anzeigen
    Sobald ich Zeile 14 (und 16) rausnehme, funktioniert der Button btnEinstellungen wieder.
    Aber dieser vibriert dann immer beim drücken.
    Dieser soll halt nur vibrieren, wenn in der Klasse Einstellungen die Checkbox vibrationCheckbox aktiviert ist.

    Ich freue mich über Hilfe.^^

    MfG
    PyroPing
  • Hallo PyroPing,

    was für eine Fehlermeldung bekommst du denn? Eine NullPointerException bestimmt, oder? :D

    Einstellungen und Hauptmenu scheinen bei dir ja beides Activitys zu sein. Wenn du die Einstellungen-Activity einfach mit new Einstellungen() instanzierst, dann ist es ja nicht dasselbe Objekt, wie die Activity, die du auf dem Bildschirm gesehen hast. Und weil die Checkbox in der Einstellungen-Activity ja im wahrscheinlich in der onCreate() gesetzt wird, ist die vibrationCheckbox in deiner neuen Instanz einfach null.

    Aber selbst wenn du die richtige Einstellungen-Activity hättest, würde dir das Abfragen der Checkbox darin wahrscheinlich nicht funktionieren, weil die Activitys im normalfall zugrückgesetzt werden, wenn sie verlassen werden. Wenn du Einstellungen speichern willst, würde ich dir die SharedPreferences empfehlen (developer.android.com/referenc…content/SharedPreferences), dort kannst du deine Einstellungen einfach direkt beim Ändern der Werte ablegen, dann sind die überall in deiner App verfügbar und bleiben auch gespeichert, wenn die App geschlossen wird. :)
    Grüße

    Robert
  • Hallo ich möchte noch zu meinem Vorredner hinzufügen.
    Erstens ist es so das activitys beendet werden wenn wenn du z durch einen Intent zu einer neuen gehst.
    Es stimmt auch das wenn du eine neue Instanz der Klasse erstellst es nicht gleiche ist. Eigentlich machtan das auch nicht selber von einer activity eine Instanz zu erstellen.
    Denn beim erstellen einer Instanz mit new wird der Konstruktor aufgerufen denn es bei einer activity nicht gibt die onCreate wird nicht durchlaufen.
    Du versuchst zwar nach dem erstellen der Instanz und dem neu erstellten opjekt test2 die Instanz zu in Chackbox zu casten was aber mit sicherheit schief geht. Dazu müsste die Activity eine chackbox zurück geben was sie nicht tut.
    So kann das nie gehen. Wolte das nur noch mal etwas verdeutlichen.

    Auch müsste ja das gleiche Layout in Beiten activitys geladen werden. Du hast einen großen Denkfehler bei der Realisierung.

    Dukannst nicht so einfach von deinen Aktivity auf eine andere zugreifen. Du kannst bein Aufruf start durch intent Parameter übergeben, oder die schon angesprochen sharedpref benutzen.

    So wie du das machen willst geht das nicht in Android. In Java auf dem Desktop ist anders da geht es leichter von einen Fenster auf ein anderes zuzugreifen.






    M
    F
    Ein Feedback auf Tipps ist auch schön. :P
  • Sorry, dass ich mich jetzt erst melde.

    RsDev
    Japp geau, die Fehlermeldung NullPointerException erscheint.
    SharedPreferences, da arbeite ich mich rein.

    jogimuc
    Ja gerne, danke für die Verdeutlichung. Je mehr erklärt wird, desto besser.^^
    Stimmt, das habe ich nicht realisiert, dass beide Actitvities auf ein anderes Layout zugreifen.

    Danke euch beiden.

    MfG
    PyroPing
  • Stimmt, das habe ich nicht realisiert, dass beide Actitvities auf ein anderes Layout zugreifen.
    wie ich schon sagte kannst Du nicht von einer activity auf eine andere zugreifen. Somit auch nicht auf das layout der alten activity.
    Stellte dir activitys so vor als wären es einzelne Programme. Wenn eine activity verlassen wird und das System eine neue aufruft wird die alte beendet auch der Speicher Bereich wird meistens freigegeben. Deshalb musst du die Parameter beim Start in den intent packen.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()