2 verschieden Buttons bei Click mit zwei verschiedenen BackroundResources belegen

  • Antworten:40
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 56

10.07.2018, 17:22:02 via Website

Hallo :)

Ich entwickel ein Quiz, ich habe ein Textview für die Frage und 4 Antwort Buttons.
Jetzt möchte ich das wenn man eine Frage Falsch rät, der Button in Rot angezeigt wird und der mit der richtigen Antwort in Grün, dafür hab ich zwei Backgroundresources (btnright=grün und btnfalse=rot).

Ich habe das mit einer Switch case Anweisung:

case 1:
Button40.setText(frage[1]);
Button40.setBackgroundResource(btnright);
Button41.setText(frage[2]);
Button41.setBackgroundResource(btnfalse);
Button42.setText(frage[3]);
Button42.setBackgroundResource(btnfalse);
Button43.setText(frage[4]);
Button43.setBackgroundResource(btnfalse);

dann noch case2:
case3:
und
case4:

so Zeigt er auf jeden Fall schonmal den geklickten Button an ob er richtig oder falsch ist aber bei falsch soll er jetzt noch den richtigen immer dazu anzeigen.

4 Cases, damit die antworten getauscht werden, hab ich jetzt nicht mit aufgeführt.

Ich hab es zuerst so Versucht, das hat aber nicht geklappt
Hab auch noch andere Sachen versucht wollte aber irgendwie nicht hinhauen.

case 1:
Button40.setText(frage[1]);
Button40.setBackgroundResource(btnright);
Button41.setText(frage[2]);
Button41.setBackgroundResource(btnfalse);
Button40.setBackgroundResource(btnright);
Button42.setText(frage[3]);
Button42.setBackgroundResource(btnfalse);
Button40.setBackgroundResource(btnright);
Button43.setText(frage[4]);
Button43.setBackgroundResource(btnfalse);
Button40.setBackgroundResource(btnright);

weiß da jemand vielleicht ne Lösung?

Diskutiere mit!
  • Forum-Beiträge: 56

10.07.2018, 17:28:00 via Website

Es ist aber keine onClick sondern public void um die Frage zu Laden, hab ich vergessen zu erwähnen :)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

12.07.2018, 11:53:20 via Website

Wie kann ein Button der nicht geclickt wurde für 0,3sec auf state pressed "true" gestellt werden?

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

12.07.2018, 12:23:04 via App

Garnicht. Du musst das mit einem Buttonstyle oder Drawable selber simulieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

12.07.2018, 14:04:20 via Website

Kann man nicht irgendwie sagen,

if(){
tu etwas

}else{

press Button1
}

?

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 484

12.07.2018, 14:35:23 via Website

Hi wie so setzt du die Hindergrund Farbe nicht selber nach der falschen Antwort für den richtigen Button?
Entweder solange bis eine neue Frage geladen wird entweder durch Klick eines Button neuefrage oder von mir aus auch nach Zeit.
Bei deinen Aufbau müsstest du das in allen case machen. Da du ja einen modularen Aufbau nicht willst. Bleibt dir nur das alles einzeln für jede Fragen kombination zu machen.
Kannst ja auch die richtige Antwort in einen textview anzeigen.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

12.07.2018, 15:10:46 via Website

Das ne gute Idee mit dem Textview aber ich will lieber das der antwortbutton grün wird.

Ja ich hab schon so viel versucht, ich raste bald noch aus.

Er färbt das immer nur für die nächste frage direkt ein, nie bei on Click.
Langsam bekomme ich echt zu viel von dieser scheiß Informatik.

Der Code dafür funktioniert, aber ich bekomm es zum verrecken nicht hin das der das an der richtigen stelle macht.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

12.07.2018, 15:20:32 via Website

Meinst du in den Case reinschreiben der private void fragenLaden() oder in den Case bei onClick()?

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 484

12.07.2018, 15:24:06 via Website

Du hast doch ein switch mit 4 case für die 4 möglichen Antwort klicks. Das case wo die Antwort richtig ist machst du die richtige grün.
Bei den anderen machst du falsche rot, die richtige auch grün. Nach einer Zeitschleife die richtige wider grau. Zeitschleife schaue dir Beispiele im Netz an.

— geändert am 12.07.2018, 15:25:43

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

12.07.2018, 16:15:32 via Website

Es ist in jedem Case möglich das man die richtige antwort tipt, den ich habe ne Frage auswerten Methode bei der er überprüft ob der geklickte Button die richtige Antwort enthält, wird verglichen mit richtige antwort aus dem speicher.

Ich hab das vorher schon so gemacht wie du erklärt hast mit den Cases nur das er alle Buttons überprüft und die richtige antwort sucht und grün färben sollte, was er aber nicht macht, weil er es dann immer nur für die nächste Frage die geladen wird macht.

Vielleicht liegt das an den Checkboxxen, ich probier gleich mal was aus wenn nicht schmeiß ich PC aus dem Fenster.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 484

12.07.2018, 17:39:56 via Website

Hi ich möchte dir ja nicht zu nahe treten aber wie lange Programmierst du eigentlich schon.
Ohne Code oder eine art von Programm Struktur ist es auch schwer zu helfen.
Wahrscheinlich hast du dir auch vorher wenig Gedanken über eine Programm Struktur gemacht.

— geändert am 12.07.2018, 22:11:16

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

12.07.2018, 20:32:23 via Website

Ich mach das nicht lange, seit zwei bis drei Monaten ca. hatte nur ein bisschen Hilfe meiste aus dem Internet selbst beigebracht, und ja ich hab jetzt den Fehler gefunden, es funktioniert zwar noch nicht aber es muss definitiv daran liegen das er erst nach dem man auf dem Button Clickt den Code ausführt, und dabei die neue Frage läd und deswegen die bei der neu geladen Frage einfärbt.

Gibt es ne Methode um einen Block in der onClick()
Case 1:
case R.id.button40:

            if (frageAuswerten(Button40.getText().toString())) {
                punkte++;    //Gecklickte Buttons werden Rot oder Grün weil die Buttons vorher mit nem drawable belegt sind das Clickbar ist und die Farben wechselt, das ist immer an der richtigen Positsion, also RIchtig oder Falsch zeigt er an.
            }
            if (frageAuswerten(Button41.getText().toString())) {
                Button41.setBackgroundResource(R.drawable.green);


            }
            if (frageAuswerten(Button42.getText().toString())) {
                Button42.setBackgroundResource(R.drawable.green);


            }
            if (frageAuswerten(Button43.getText().toString())) {
                Button43.setBackgroundResource(R.drawable.green);



            }

Case 2:
....
...

frage Auswerten ist nen boolean und im Prinzip sagt der nur, wenn Speicher eins von "aktuelleFrage" gleich geklickter Button ist, ist die antwort = true andernfalls bleibt die false.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

12.07.2018, 20:35:19 via Website

Ach ich wollte übrigens das ein Block in der onClick() wiederholt wird bzw ausgeführt wird, dann ein Stopp ausgeführt wird, vielleicht mit Thread.sleep wenn das dabei geht und dan erst die neue Frage geladen wird.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 484

12.07.2018, 21:42:31 via Website

Also als erstmal gehört nach jedem case ein brake sonst werden die anderen case auch durchlaufen. Hoffe das ist nur in deinem Demo so.

case R.id.button40:

if (!frageAuswerten(Button40.getText().toString())) {

Button40.setBackgroundResource(R.drawable.red);

}
if (frageAuswerten(Button41.getText().toString())) { Button41.setBackgroundResource(R.drawable.green);
// zeitschleife
// Button wieder auf grau setze
Button41.setBackgroundResource(R.drawable.grau);
}
if (frageAuswerten(Button42.getText().toString()))
{ Button42.setBackgroundResource(R.drawable.green);
// zeitschleife
// Button wieder auf grau setze
Button42.setBackgroundResource(R.drawable.grau);
}
if (frageAuswerten(Button43.getText().toString())) { Button43.setBackgroundResource(R.drawable.green);
// zeitschleife
// Button wieder auf grau setze
Button43.setBackgroundResource(R.drawable.grau);
}
break;

case ....

break;

So in etwa wurde ich sagen musste natürlich für die anderen Button auch noch machen.

Wenn du willst das der Button rot wird wenn die frage falsch ist also dein prüfen nicht wahr zurückgibt musst du es auch negieren in dem if. Erste Zeile "!".
Die richtige müsste eigentlich grün werden.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 484

12.07.2018, 22:02:56 via Website

Eine Pause, Zeitzchleifen, Wartezeiten ... sollten immer in einem eigenen Thread laufen nicht im Main(Ui) Thread wenn du den länger als ca. 3-5 sec blockirst stürzt deine App ab. Wie ich schon sagte schaue dir im Netz an wie man so was in Java macht. Ich bin am Handy und da ist Coden sehr mühsam.

Wenn du einen Block wie du sagst öfter brauchst dann mache eine Methode daraus, und rufe diese auf.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 484

12.07.2018, 22:22:39 via Website

und ja ich hab jetzt den Fehler gefunden, es funktioniert zwar noch nicht aber es muss definitiv daran liegen das er erst nach dem man auf dem Button Clickt den Code ausführt, und dabei die neue Frage läd und deswegen die bei der neu geladen Frage einfärbt.

Was ist das für eine Aussage wenn du den Fehler gefunden hast und es doch noch nicht geht.

Ja jetzt hast du erkannt das Android Event gesteuert ist. Und Aktionen über Listner callback Methoden ablaufen.

Ein Tipp kaufe dir mal ein Anfänger Buch für Android Programmierung. Wo die Zusammenhänge auch erklärt werden.

Langsam bekomme ich echt zu viel von dieser scheiß Informatik.

Auch hierzu kann ich nur sagen erstmal Grundlagen lernnen. Wenn es so einfach währe könnten die Unis zumachen.

— geändert am 13.07.2018, 08:20:01

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

13.07.2018, 10:18:02 via Website

Ja ist manchmal einfach frustrierend, besonders wenn man niemanden hat der einem das beibringen kann, nur man selber aber das ist schwer.

Und ja ich weiß jetzt woran es liegt aber wie ich das Problem löse weiß ich halt noch nicht, aber genau zu wissen was man Falsch macht ist doch ne Aussage, auch wenn man keine Lösung hat, vorher wusste ich halt nicht was falsch ist. Ist nen Problem des UI-Threads, ich hab mir auch Zeitschleife angeguckt aber noch nichts vernünftiges gefunden um mein Problem zu Lösen. Und ja wenn ich nicht studieren würde und genug Zeit hätte würde ich mir auch so nen Anfänger Buch durchlesen, vielleicht in den Semesterferien 😊

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 484

13.07.2018, 10:48:33 via Website

Ich habe mir das programmieren auch über die Jahre selber beigebracht. An gefangen mit Z80 assembler etwas Basic, Hauptsprache c, c++, wegen android zu java gewechselt. Zwischendurch mal Prolog.
War immer Borland begeistert gibt es ja nun nicht mehr.
Was studierst du?
Für eine kurze Threads was das ja ist was du willst,würde ich dir Asynctask empfehlen.

— geändert am 13.07.2018, 10:55:28

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 56

13.07.2018, 11:04:59 via Website

Ja Asyntask hab ich mir auch angeguckt, damit wollte ich das machen nur noch nicht genug Zeit gehabt mich richtig einzulesen.

Ich hab jetzt mit Java begonnen in der Uni machen wir noch c+ aber das find ich ist nicht so geil.

Ich studiere Bauingenieurwesen :)

Hilfreich?
Diskutiere mit!

Empfohlene Artikel