2 verschieden Buttons bei Click mit zwei verschiedenen BackroundResources belegen

  • Antworten:40
Parasite
  • 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?

Kommentieren
Parasite
  • 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?
Kommentieren
Parasite
  • 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?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

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?
Kommentieren
Parasite
  • Forum-Beiträge: 56

12.07.2018, 14:04:20 via Website

Kann man nicht irgendwie sagen,

if(){
tu etwas

}else{

press Button1
}

?

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

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?
Kommentieren
Parasite
  • 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?
Kommentieren
Parasite
  • 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?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

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?
Kommentieren
Parasite
  • 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?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

12.07.2018, 16:22:46 via Website

Sag wo du wohnst ich fang ihn auf.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

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?
Pascal P.
Kommentieren
Parasite
  • 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?
Kommentieren
Parasite
  • 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?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

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?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

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?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

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?
Kommentieren
Parasite
  • 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?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

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?
Kommentieren
Parasite
  • 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?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

13.07.2018, 12:03:22 via Website

So in etwa habe es nicht getestet nur so am Tablet geschrieben.
Soll dir als anhalstspunkt dienen. Füge es als innere klasse ein.

class AsyncTaskRunner extends AsyncTask<Button, Void, Void> {

    @Override
    protected Botton doInBackground(Button... params) {

        try {
          // thread to sleep for 1000 milliseconds
           Thread.sleep(1000);
           } catch (Exception e) {
         System.out.println(e);
           }        
      return params[0];
    }


    @Override
    protected void onPostExecute(Button result) {

        // button wiederauf grau setzen
        // die methode lauft im ui nach ende von doinbackground
    result.setBackgroundResource(grau); 

    }

}

Aufruf

AsyncTaskRunner t = new AsyncTaskRunner();
t.execute(Button41, null,null);

http://www.programmierenlernenhq.de/tutorial-android-prozesse-threads-und-asynctask/

— geändert am 13.07.2018, 12:05:43

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

14.07.2018, 12:39:57 via Website

class AsyncTaskRunner extends AsyncTask {

    @Override
    protected Button doInBackground(Button... params) {

        if (frageAuswertenliste(Button40.getText().toString())) {
            Button40.setBackgroundResource(R.drawable.green);
        }

        if (frageAuswertenliste(Button41.getText().toString())) {
            Button41.setBackgroundResource(R.drawable.green);
        }

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

        }

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

        }


        try

    {
        // thread to sleep for 1000 milliseconds
        Thread.sleep(600);
    } catch(
    Exception e)

    {
        System.out.println(e);
    }
        return params[0];
}


    @Override
    protected void onPostExecute(Button result) {

        // button wiederauf grau setzen
        // die methode lauft im ui nach ende von doinbackground

        if (frageAuswertenliste(Button40.getText().toString())) {
            Button40.setBackgroundResource(btnright);
        }else{
            Button40.setBackgroundResource(btnfalse);
        }

        if (frageAuswertenliste(Button41.getText().toString())) {
            Button41.setBackgroundResource(btnright);
        }else{
            Button41.setBackgroundResource(btnfalse);
        }

        if (frageAuswertenliste(Button42.getText().toString())) {
           Button42.setBackgroundResource(btnright);

        }else{
            Button42.setBackgroundResource(btnfalse);
        }

        if (frageAuswertenliste(Button43.getText().toString())) {
            Button43.setBackgroundResource(btnright);

        }else{
            Button43.setBackgroundResource(btnfalse);
        }

// result.setBackgroundResource(btnright);

    }

}

und in der onClick rufe ich das so auf:

    @Override
    public void onClick(View view) {

        AsyncTaskRunner t = new AsyncTaskRunner();
        t.execute(Button40, Button41, Button42, Button43, null, null);

aber macht er trotzdem nicht, manchmal färbt er es gar nicht(das versteh ich auch nicht warum er es manchmal nicht färbt) und manchmal wieder nur bei der nächsten frage und nicht bei der aktuellen frage. Was macht eigentlich diese null,null bei t.execute?

ich hab das t.execute nach ganz oben gepackt in onClick, weil wenn ich das in die Cases mache stürtzt er nur ab.

Muss ich das vielleicht mit onProgressUpdate() machen?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.07.2018, 13:28:12 via Website

Du dafst im Background rein garnichts mit der UI machen, das gibt nur Probleme!

Wenn du etwas verögern willst, bleib im UI Thread und nutze Handler#postDelayed...
Also weg mit dem AsyncTask, zudem war der von Jockel auch nur für das Thread Sleep gedacht und für mehr nicht...

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

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

14.07.2018, 15:19:18 via Website

Aber ich will ja nicht umbedingt was verzögern eher das er das bei onClick ausführt und dann erst ne neue Frage läd, weil so wie es jetzt ist führt er bei onClick neue Frageladen und die Berechnung für die neue Frage aus, das heißt aber das dann die richtige Frage angezeigt wird bevor man rät.

Für mich scheint es so als wäre es nen Problem des UI-Threads, irgendwie muss mann doch sagen können, er soll das bei onClick rechnen und ausführen und dann kurz stoppen und dann erst die neue Frage laden.

Und es ist halt immer das gleiche, ob ich das mit Asyntask mache oder den code in die Cases schreibe, er läd ne Frage und führt die Berechnung aus, aber er soll erst die Berechnung ausführen dann die Frage Laden aber da das alles onClick passiert macht er das nie.

Ist es möglich mit dem postDelay etwas in der rheienfolge in der er etwas ausführt zu verändern?

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

14.07.2018, 15:21:07 via Website

Vielleicht ist es auch möglich zu sagen das er Fragen laden immer nach onClick ausführt?

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

14.07.2018, 16:12:35 via Website

Ja dann musst du das alles in der in onklick Methode machen. Eigentlich bist du bei android fast immer i einer onklick Methode.
Am anfang in der oncreat erstellst du dein layout, lädst dein Liste. Lädst die erste frage
Zeigst sie an. Ab hier bist u eigentlich immer in der onklick.
Also wenn ei er ei en Button klickt wertet du den aus ob richtig gelockt setz deine Anzeige wartest etwas und lädst die nächste Frage. Jerzt ist die Kontrolle wieder bei android. Beim negste klick bist du wieder in deiner onklick. Glaube du hast mit dem prinzipiellen Ablauf eines Programms und ganz besonders android ein Problem. Denke du hast das Prinzip von oop noch nicht verstanden.
In der Schule habt ihr zwar c++ aber ich denke da werdet ihr hauptsächlich sruckturirt programmieren und vorallen kein framework wie android benutzen.

Dann zeige mal deine onklick Methode und erkläre etwas was du wan wo machst.

So St ist Hilfe schwer.

In Android gibt es zb. Keine Main Methode wie du es von c in der schule kennst. Android ist auch ein Event basierendes System. Jede User eingabe kommt in einer callback Methode an. Wo du dann deinen Code scheiben kannst um darauf zu reagieren. Glaube das ist dein eigentliches Problem.

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

14.07.2018, 16:42:03 via Website

Nein das ist es nicht, ich hab callback methoden und eine Frage wird auch am Anfang geladen , wenn sich das layout aufbaut, ich glaube ihr versteht das Problem gar nicht, dabei müsste das etwas Grundlegendes sein.

Mein Problem ist das onClick!!! ich brauche im onClick eine Rheienfolge der aufgaben die er abzuarbeiten hat, das funktioniert aber nicht weil er alles aufeinmal macht.

Ich stelle später die onClick hier rein, dann müsste man das Problem ja sehen.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

14.07.2018, 17:27:36 via Website

Ich verstehe es schon nur du kannst uns oder mir nicht folgen.
Das er alles auf einmal in der in onklick macht kann nicht sein. Außer du benutzt Threads und hast somit dein Programm parallelisiert.Denke das ist nicht der Fall.
Also in der onklick wird nichts paralel abgearbeitet. Klar wenn du beim klick die Antwort auswertete ,und Anzeigst, und auch gleich wieder eine neue Frage lädst , das es für dich so aus sieht als würde alles gleichzeitig passieren.
Fange an zu denken was zur Laufzeit passiert. Denke auch etwas zyklischer einfach so wie es der Computer auch macht. Nicht der Computer macht die Fehler sondern du in deiner nicht seriellen Denkweise.
Wie ich dir das anders erklären soll weiß nicht dann ist es wohl wirklich besser Du schmeißt den pc aus dem Fenster. Wie du es schon wolltest.

Entweder du fürst einen Button für eine neueFrage ein oder benutzt eine Zeit Verzögerung wie habe ich dir gezeigt.

Wenn du dir andere Quiz anschaust da gibt es meistens einen weiter Button.

Ich denke eher du verstehst deinen eigenen Programmablauf, Stiel nicht.
Als uns vorzuwerfen wir würden dein Problem nicht verstehen.
Glaube wir haben uns wirklich mühe gegeben dir zu helfen.

Hast du dich eigentlich mal mit den Debugger beschäftigt ? Denn damit kannst du auch sehen was nacheinander ausgeführt wird , auch sind Logs und Logcat ein gutes Mittel um zu sehen wie in welche Methode verzweigt wird.
Fehler Analyse ist auch ein teil der Programmierung und gehört auch zu den Grundlagen. Wird wohl auch noch in der Schule kommen.
Aber auf das Forum schimpfen und behaupten keiner versteht dein Problem.
:(

Mache dir mal Gedanken wie so ei Quiz überhaupt funktionieren kann.
Was alles nacheinander passieren muss vor allen was alles nach einem Ereignis (User eingabe) passieren muss und kann soll. Struckturplan.
Mache dir einen Programmablaufplan. So wie man das auch früher gemacht hat. Wenn du nicht weisst was das ist google danach.

So jetzt schicke deine Methode.

— geändert am 14.07.2018, 22:34:24

Hilfreich?
swa00
Kommentieren
Parasite
  • Forum-Beiträge: 56

14.07.2018, 17:47:03 via Website

Bin gerade unterwegs, schicke ich heute abend, vill hab ich jetzt aber ne Lösung, wenn das mein Fehler war nimm ich meine Hand und klatsch sie mir vors Gesicht 😂

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

21.07.2018, 12:29:34 via Website

Sry, ich hatte viel zu tun, schreib in paar Tagen Klausuren und hatte mein Aufladekabel vergessen also konnte ich nicht an den PC.

Hier ist der Code des onClick:

if (list < 0) {

        switch (view.getId()) {
            case R.id.button40:

                if (frageAuswertenliste(Button40.getText().toString())) {
                    punkte++;
                }
                if (aktuelleFrage > GeoFrage.size() - 1) {
                    aktuelleFrage = 0;
                }

/*else{
               aktuelleFrage++;
               FragenLaden();*/                      //So sah das vorher haus um die Frage zu Laden

                break;

         case2.
        break;

case3.
break;

case4.
break;

}
aktuelleFrage++;
FragenLaden();
}
// Jetzt hab ich das so, aber es ändert sich nichts.

sehen alle gleich aus, nur halt andere Buttons.

list ist ein int und wird erhöht wenn die Checkbox isChecked()

und ja mir ist schon klar das das nicht direkt parallel das berechnet, aber sobald man Clickt kann mann den Ablauf nicht mehr verhindern, verändern oder verzögern, zumindesten weiß ich noch nicht wie das geht.

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

21.07.2018, 13:24:45 via Website

Ich weiß das er das nicht alles aufeinmal macht aber wenn man Clickt kann man halt den ablauf nicht verändern, zumindestens weiß ich noch nicht wie.

Und ne, Fehleranlysen machen wir nicht, wir lernen auch nur Grundlagen für C+, was ich sowie so voll veraltet finde und sinnlos für die Zukunft aber naja.

Erstmal ist es ja ganz nett das ihr helfen wollt, ihr gebt euch ja auch Mühe aber manchmal denke ich ihr wollt mich hier verarschen oder so, vielleicht reden wir auch einfach nur aneinander vorbei weil Informatik über Schrift doch schwer zu erklären ist.

Du redest schon wieder von Zeitverzögerung, aber das Funktioniert in der onClick nicht, bzw. ja funktioniert, aber es bringt mir nichts weil er dann nur die onClick Berechnung stoppt kurz und erst nach dem onClick die Buttons einfärbt.

Kp wie oft ich das noch erklären soll, ich hab langsam keine Lust mehr.
Also wenn die onClick aufgerufen wird, weil man einen Button geklickt hat, macht der doch alles was in der onClick steht, nur ob ich das jetzt dadrin stoppe oder nicht macht keinen unterschied, weil die Ergebnisse erst nach dem Click angezeigt werden. Ich Klicke einen Button und dann wird ne neue Frage geladen und die Button eingefärbt,bei der NEUEN FRAGE was aber nicht mein Ziel ist!! Ich möchte auch keinen extra Button für die neue Frage, dann wäre das alles ziemlich einfach und ich hätte das schon, ich möchte aber bei Button CLick ne Auswertung haben und dann nach kurzer Zeit ne neue Frage.

Mit einem Button der die nächste Frage macht funktioniert das ja anders, würde in der OnClick nicht FragenLaden() sein auf allen 4 Buttons sondern nur auf den einen, den ich ausgrenzen könnte. Dann würde das bestimmt auch funktionieren.

Aber ich will das der Auswertet, stoppt kurz um Auswertung anzuzeigen und dann nächste Frage läd und das alles bei einem Click.

Wenn ihr jetzt keine vernünftige Lösung dafür habt und mir wieder damit ankommt das ich den Ablauf nicht verstehe ect. dann lasst es sein und antwortet einfach nicht, ich suche mir dann nen neues Forum.

Ich hab jetzt noch ne Idee und probier das.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

21.07.2018, 14:54:00 via Website

Und ne, Fehleranlysen machen wir nicht, wir lernen auch nur Grundlagen für C+, was ich sowie so voll veraltet finde und sinnlos für die Zukunft aber naja.

Denke Fehlersuche mit einem Debugger wird schon Dabei sein.
C++ veraltet würde ich nicht sagen wenn du das Verstanden hast verstehst du auch andere Sprachen.
C++ und Java sind nicht so weit auseinander. Kann aber auch sein das ihr nur in "C" also strukturiert Programmiert und nicht OOP "C++" .
Ihr werdet wohl grundlegenden Programmiere Strukturen lernen und da ist die Sprache eigentlich neben sächlich. Wenn du das Prinzip den Algorithmus verstanden hast kannte das auch in andere Sprachen benutzen. Arber das ist deine Meinung .

Zum Thema
Richtig alles was in der onClick steht wird bei einen Klick ausgeführt.

Frage wann und wo zeigst du denn das Ergebnis an?
In welcher Methode wird das Ergebnis angezeigt?

Sieht so aus das du erst die neu Frage lädst und dann das Ergebnis anzeigen möchtest.

Mit der Zeit Verzögerung meine ich einen Stopp zwischen nach Ergebnis anzeigen und Frage neu Laden. Wie willst du das Ergebnis betrachten wenn du wieder eine neu Frage lädst und die auch wieder Anzeigst?

In der onCklick lädst du eine neue Frage nach jeden Case und auch nochmal am ende.

Um eine Pause zwischen den Anzeigen und neue Frage laden zu machen.
Rufst du die Methode „FragenLaden();“ in einen Asyntask auf der in seiner „doInBackground“ eine Zeit lang schläft und in der „onPostExecute“ kannte dann dein „FragenLaden();“ machen den die Methode läuft wieder im UI. In der onClick startest du die Asynktask klasse mit .execute( ).
Du bist dann wieder aus der onClick raus. und nach ablauf der zeit wird die Methode FragenLaden() aufgerufen. Must dein Code natürlich so auf bauen das dies auch alles unabhängig geht.

Mit einem Button der die nächste Frage macht funktioniert das ja anders, würde in der OnClick nicht FragenLaden() sein auf allen 4 Buttons sondern nur auf den einen, den ich ausgrenzen könnte. Dann würde das bestimmt auch funktionieren.

Nein würde es nicht und so wie du es momentan hast lädst du sogar zweimal die Frage neu.

Aber ich will das der Auswertet, stoppt kurz um Auswertung anzuzeigen und dann nächste Frage lädt und das alles bei einem Click.

Habe ich gerade noch mal erklärt hatte dir auch ein Beispiel gegeben.
Hier ein link zu Asynktask.
http://www.programmierenlernenhq.de/tutorial-android-prozesse-threads-und-asynctask/

Wenn ihr jetzt keine vernünftige Lösung dafür habt und mir wieder damit ankommt das ich den Ablauf nicht verstehe ect. dann lasst es sein und antwortet einfach nicht, ich suche mir dann nen neues Forum.

Von mir aus tue das.
Nur ob es da besser ist?
Bei deinem etwas Chaotischen Code, Pascal hatte dir schon am Anfang gesagt das du es etwas Objekt orientierter machen sollst. Auch mich hast du gefragt ob du das machen sollst darauf habe ich dir gesagt das musst du selber wissen.

Wünsche dir noch viel Erfolg.

— geändert am 21.07.2018, 15:02:07

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

21.07.2018, 16:31:41 via Website

Das versuche ich mal mit asyntask aber ne ich lade die Frage nicht zweimal neu, ich mach es entweder im case oder lass die in den cases weg und lade die frage am ende neu, deswegen hab ich doch /* Text */ gemacht, damit man sieht das das gegebenfalls auskommentiert ist und habe auch noch // einen kommentar dazu geschrieben.

Zu dem asyntask, das wollte ich ja machen aber einer von euch beiden meinte dann wieder nein auf keinen fall mit asyntask, weil man nicht in die UI eingreifen soll.

Ich versuch es jetzt so wie du gesagt hast das man fragenladen() sozusagen schlafen legt und am ende aufruft, das klingt auch logisch nachdem was ich über asyntask gelesen habe.

Und ja zu den Sprachen, Java ist theoretisch ja sogar älter als c und c++ glaub ich ne und du hast Recht wir lernen so Grundlegende Sachen, aber erstmal versteht das die meisten trotzdem nicht und veraltet finde ich ist das weil man heutzutage vieles über apps macht, mit Sicherheit hat jede Sprache seine vor und Nachteile aber ich denke das meiste wird in der Zukunft über Apps geregelt und Java ist zurzeit dafür das beste :)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

21.07.2018, 18:01:49 via Website

Und ja zu den Sprachen, Java ist theoretisch ja sogar älter als c und c++ glaub ich ne und du hast Recht wir lernen so Grundlegende Sachen, aber erstmal versteht das die meisten trotzdem nicht und veraltet finde ich ist das weil man heutzutage vieles über apps macht, mit Sicherheit hat jede Sprache seine vor und Nachteile aber ich denke das meiste wird in der Zukunft über Apps geregelt und Java ist zurzeit dafür das beste

Java ist nicht das Beste, das Android Framework benutz halt nun mal Java. Viele Teile von Android sind in C geschrieben. Auch dein Windows ist zum größten Teil in C geschrieben.
Wenn Java für Apps das beste ist wieso nutzt Appel dann Objekt-C, Microsoft C# um ihre Apps zu schreiben?
C ist eine sehr System nahe Problemorientierte Sprache die wird so schnell nicht aussterben.
Dort wo es um Geschwindigkeit geht zB. Animationen wird sie immer ihre Berechtigung finden.

Alles über APP was meist du wie die entstehen mit Hilfe von Programmieren sprachen.
Wer und womit schreibst du deine APPs ?

Das was du da sagst ist ziemlicher Schwachsinn.

Zum Tehma das Beste auch in Android Studio ist nun eine neuere Sprache eingezogen Kotlin. Warum macht Google das wohl?

Es wird immer neuere Sprachen geben die versuchen es den Programmier leichter zu machen.

— geändert am 21.07.2018, 18:18:52

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

22.07.2018, 10:29:54 via Website

Ja es wird immer neue Sprachen geben und alle haben Vor und Nachteile, wie ich gesagt habe aber in der Uni machen wir Sachen die gefühlt aus den 90ern kommen. Und ja Apple ist halt Apple die brauchen immer was eigenes.
und ich hab ja auch gar nichts gegen C, sicherlich ist das für manche Sachen besser aber für mich sieht das noch schwieriger aus als mit Java.

C# ist ja relativ neu oder, vielleicht ist das ja gut, ich weiß es nicht, man kann ja nicht alle kennen.
Von Kotlin hab ich auch gehört, könnte auch gut sein weiß ich aber auch noch nicht.

Ich meinte ja auch nicht das Java das einzige ist aber zurzeit das populärste, Ich hatte auch überlegt erst über die Apple Sprache zu schreiben aber bin kein besondere Fan von Apple, und Warum Google Kotlin einführt, mit Sicherheit weil sie es für besser halten oder mehr möglichkeiten schaffen wollen, denke ich, heißt aber ja noch nicht direkt das das auch besser ist.

Ich hab es übrigens Geschafft das er jetzt erst die Farbe färbt und dann die Frage neu läd, aber bei der zweiten Frage stürtzt dann die App ab, warum auch immer muss ich mich gleich nochmal mit Beschäftigen.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

22.07.2018, 10:49:37 via Website

in der Uni machen wir Sachen die gefühlt aus den 90ern kommen.

Grundlagen wirken immer alt sind aber notwendig. Du wirst schon noch dahinter kommen das das auch etwas Sinn macht. sich mal etwas Älteres anzusehen und zu verstehen.
Ok wenn dir C nicht liegt, wobei das nicht so weit auseinander ist, Java und C# sind sehr dicht beieinander. C ist nicht deins , aber die Logik und die Algorithmen die ihr da durch nehmt sind bestimmt sinnvoll.

Gib mal ein Beispiel was ihr da in der Schule macht. Ob Das wirklich so weit hergeholt ist?
Ist es Objektorientiert oder Strukturiert ?
ich meine benutzt ihr Klassen und Methoden, oder spricht der Lehrer von Funktionen und ihr arbeitet meistens auf der Konsole mit „printf „ für eine Ausgabe.

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

22.07.2018, 15:00:11 via Website

wir reden meistens über Funktionen und über Konsole, printf scanf ect. Über Bibliotheken, Arrays und halt so Grundlegende Sachen wie ein computer funktioniert, wie der das abspeichert, wie der compiler das unwandelt, Das ja auch wichtig aber das was wir an der konsole machen halt ich nicht für so sinnvoll. Ich finde auch das C ziemlich unübersichtlich ist im Gegensatz zu Java mit Android Studios, vielleicht kommt mir das auch nur so vor.

Ist Kotlin den gut? Wofür kann man das gebrauchen? Und kann man Java mit Kotlin kombinieren, also z.B. einen Teil einer App in Java und andere Teil in Kotlin und das später zusammenfügen?
Weil du meintest das läuft auch über Android Studios.

Ich gucke mir Kotlin auf jeden Fall mal an die Tage 😊

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

22.07.2018, 18:31:04 via Website

Ok dann Programmiert ihr in der Schule hauptsächlich Strukturiert und nicht OO. In C ist beides möglich. Java dagegen ist eine reine OO Sprache, in der einiges vereinfacht wurde oder weggelassen wie zB die Pointer Arithmetik was ich persönlich schade finde. Gut find ich an Java das vereinfachte erstellen von Objekten zB mit „new“ auch brauchst du dich nicht um das freigeben von Ressourcen zu kümmern das macht in Java der Crabage Collector sowas gibt es bei C nicht.

Zu Kotlin ob das gut ist kann ich nicht sagen ich persönlich mag es nicht so sehr. Auch wenn man sich da einiges an Tipparbeit sparen kann. Da es etwas komplexer und Stukturirter ist.
Kann auch sein das es den den Java Bytecode oder besser den Dalvic Byte Code besser unterstütz.
Und somit das Android Framework besser unterstützt ausnutzt als Java.

Die Syntax ist schon etwas verschieden in Bezug auf Java, C++, C# , Perl , Php oder auch Python.

Wie gesagt kann ich mich mit dieser Syntax nicht so richtig anfreunden.
Aber vielleicht ist es was für dich.

In Android Studio ist Kotlin nun integriert und es kann glaube auch gemischt werden zu mindestens kannst du dir eine Java Quelle zu Kotlin Übersetzen lassen. Google will das zur Hauptsprache von Android machen schauen wir mal ob es das wird. Beide Sprachen und beide Compiler erzeugen den gleichen Java / Dalvic Bytecode.

Entscheide selber was dir besser liegt.

Ps. Wie weit bist du mit deinem Projekt deinem Quiz. Was ja das Haupttehma hier war.

— geändert am 22.07.2018, 18:36:37

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

22.07.2018, 19:09:02 via Website

Das hört sich sehr gut an mit Kotlin wenn man das mischen kann, ich mach mich darüber mal schlau, wie alt ist kotlin denn?

Joa mein Quiz kommt voran, aber da ich zurzeit Prüfungen schreibe nur langsam 😂 Ist aber immer noch Alpha Testphase, ich will es erst noch bisschen aufbauen ich hab noch einige Ideen die ich umsetzen will 😊

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

22.07.2018, 19:21:49 via Website

wir reden meistens über Funktionen und über Konsole, printf scanf ect. Über Bibliotheken, Arrays und halt so Grundlegende Sachen wie ein computer funktioniert, wie der das abspeichert, wie der compiler das unwandelt, Das ja auch wichtig aber das was wir an der konsole machen halt ich nicht für so sinnvoll. Ich finde auch das C ziemlich unübersichtlich ist im Gegensatz zu Java mit Android Studios, vielleicht kommt mir das auch nur so vor.

Zum Grund Verständnis ist das trotzdem nicht schlecht und ich Gaube die meisten haben mal so angefangen. Zu wissen wie der Computer das intern etwas macht ist auch nicht schlecht. Auch das Thema Daten Typen lässt sich so recht gut zeigen und erforschen. Mit printf Schell eine Ausgabe auf die Konsole ist schon Praktisch ohne erst ein GUI zu benutzen wenn man mal was testen will.
Geht übrigens auch in Java und Android „System.out.println(„Hallo “);“
Ihr Programmiert hier sozusagen auf der Kommandozeile wie früher unter Dos nur heute in einem Fester das einen Text Bildschirm Darstellt. Ihr Schreibt auf dem Betriebssystem ohne ein Framework zu benutzen Richtig. Das ist klassisches C hat nicht viel mit C++ oder OOP zu tuen.

Jetzt verstehe ich auch warum du dich mit so aussagen wie von Pascal deinen Programm Code etwas Objektorientierter zu gestalten so schwer tust.

Wie alt ist Kotlin denn? Weiss ich nicht.
Fage mal Google die wissen doch alles.:D

Ps Kotlin wurde erstmalig 2011 vorgestellt. 2016 kam die Version 1.0

— geändert am 22.07.2018, 19:37:44

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

24.07.2018, 10:15:13 via Website

Ja wir machen das in der Uni so wie du gesagt hast, ist halt ganz anders zu dem wie ich das mit Android Studios programmiere.

Ja ich bin mal gespannt auf Kotlin, hab noch keine Zeit, muss noch lernen für andere Sachen aber bald hab ich frei dann gucke ich mir das an.

Hilfreich?
Kommentieren