Android Nach Buttonclick neu laden

Timotion.

Mitglied
Hi🙂
Vorweg, ich bin ein wirklicher Anfänger, die dinge die ich bis jetzt weiß habe ich mir durch Bücher und google beigebracht. Nachdem ich mich mit Java auseinandergesetzt habe wollte ich mich parallel mit der Entwicklung auf Android befassen.

Meine Idee war, eine App zu erstellen die "Quizduell" ähnelt. Also eine zufällige Frage mit 4 Antwortmöglichkeiten auf Buttons, wobei die Position der Richtigen Antwort auch zufällig ist. Soweit bin ich gekommen, allerdings schaffe ich es nicht das sich nach dem Buttonklick eine neue frage läd. Ich habe es dann mit einer while-schleife um den code probiert, allerdings blieb dann mein Fenster komplett schwarz. Wahrscheinlich weil die Schleife nirgends angehalten wird, sondern unendlich oft von vorne beginnt. Danach habe ich (durch google inspiriert) eine schleife in dieser Schleife gemacht, die das Programm aufhalten sollte und nach einem Buttonklick beendet wird. Allerdings wieder nur ein schwarzes Fenster.

Könnt ihr mir sagen wie ich das Problem lösen kann? Wäre sehr dankbar über Codeverbesserung, Stichworte und alles was nützlich sein kann. Außerdem noch eine Frage, weshalb lassen sich in onClickListener nur finale Variablen benutzen?

Habt ihr eventuell noch gute Websites, Tutorials oder Bücher die ihr empfehlen würdet und die sich direkt auf den Umgang mit android beziehen? Ist es sinnvoll mit der entwicklerseite direkt zu lernen?

Danke für eure Hilfe🙂

Anbei mein code; außer dieser klasse gibt es noch eine für Fragen, Antworten, einer Zufallszahl und einer prüfungsklasse die mir sagt ob die richtige auswahl getroffen wurde.

[Java]
package com.quizapp.quizapp;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import java.util.*;
import android.view.View.*;

public class MainActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//Bekomme Buttons und objekte = = = = = = = = = = = = =
final Button buttonol =(Button) findViewById(R.id.buttonol);
final Button buttonor =(Button) findViewById(R.id.buttonor);
final Button buttonul =(Button) findViewById(R.id.buttonul);
final Button buttonur =(Button) findViewById(R.id.buttonur);
TextView meinefragebox =(TextView) findViewById(R.id.fragetext);
fragen meinefrage = new fragen();
zuzahlen zufallszahl = new zuzahlen();
meinefrage.setfragen();
antworten antworter = new antworten();
antworter.setant();
final pruefen pruefung = new pruefen();
boolean spiellaeuft = true;
final TextView ergebntxt = (TextView) findViewById(R.id.ergebnisanzeige);
final TextView punktzahl =(TextView) findViewById(R.id.pktzahl);
int punkte = 0;
// = = = = = = = = = = = = = = = = = = = = = = = = =
int bu;
bu = meinefrage.anzahlfragen();
int zahl = zufallszahl.getzahl(bu);
String diefrage = meinefrage.getfragen(zahl);
meinefragebox.setText(diefrage);
int zuege = 1;
//while(spiellaeuft){
//if(zuege>0){
//=== Antworten b3kommen
ArrayList<String> dieantworten = new ArrayList<String>();
dieantworten = antworter.getantworten(zahl);

final String richtigeantwort = dieantworten.get(0);
String falschantwort1 = dieantworten.get(1);
String falschantwort2 = dieantworten.get(2);
String falschantwort3 = dieantworten.get(3);
int min = 0;
int max = 4;
int wielange = 4;

// Den Buttons die Antwortmöglichkeiten zuweisen
int position = (int) (Math.random()*max);
max = max-1;
buttonol.setText(dieantworten.get(position));
dieantworten.remove(position);
//===
position = (int) (Math.random()*max);
max = max-1;
buttonor.setText(dieantworten.get(position));
dieantworten.remove(position);
//===
position = (int) (Math.random()*max);
max = max-1;
buttonul.setText(dieantworten.get(position));
dieantworten.remove(position);
//===
position = (int) (Math.random()*max);
max = max-1;
buttonur.setText(dieantworten.get(position));
dieantworten.remove(position);
int zt = 5;
//========Den Buttons ihren zweck geben
int solange = 1;
ergebntxt.setText("");

buttonol.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{

final String a = (String) buttonol.getText();
boolean istrichtig = pruefung.pruefdich(richtigeantwort, a);
if(istrichtig){
ergebntxt.setText("Die antwort war richtig!");

}else{
ergebntxt.setText("Leider Falsch");
}
}
});

buttonor.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{
final String a = (String) buttonor.getText();
boolean istrichtig = pruefung.pruefdich(richtigeantwort, a);
if(istrichtig){
ergebntxt.setText("Die antwort war richtig!");

}else{
ergebntxt.setText("Leider Falsch");
}
}
});

buttonul.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{
final String a = (String) buttonul.getText();
boolean istrichtig = pruefung.pruefdich(richtigeantwort, a);
if(istrichtig){
ergebntxt.setText("Die antwort war richtig!");

}else{
ergebntxt.setText("Leider Falsch");
}
}
});
buttonur.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{
final String a = (String) buttonur.getText();
boolean istrichtig = pruefung.pruefdich(richtigeantwort, a);
if(istrichtig){
ergebntxt.setText("Die antwort war richtig!");

}else{
ergebntxt.setText("Leider Falsch");

}
}
});
//_____________


if(ergebntxt.getText().equals("Leider Falsch")){
solange = 0;
zt =0;
}else if(ergebntxt.getText().equals("Die antwort war richtig!")){
zt = 0;
solange = 0;
}

l

};

//ergebntxt.setText("Spiel zuende");
//}//ende der while spiellaeuft schleife

}[/code]
 
Zuletzt bearbeitet:
machs dir doch leicht für jede Fragenrunde also jeweils 4 Fragen oder mehr kannst du doch nee neue Activity machen und
mit ner if abrage überprüst du es dannach kannst du ja weiter zur nächsten activity springen
 
Mit weiteren acticities hab ich mich bisher nochnicht auseinander gesetzt, werde ich mir mal ansehen vielen dank🙂 Aber habe ich da dann nicht wieder das selbe problem, wenn ich in einer davon 4 Fragen anzeigen lassen will?
 
Ich habs jetzt mit einer klasse versucht, die eine methode hat welche mit intend nocheinmal die mainactivity läd.Die Methode rufe ich aus einem onclicklistener auf. Leider bekomme ich immer eine nullpointerexception in zeile 19 der Neustart-klasse. Ich weiss echt nichtmehr weiter:/ nebenbei, kann mir jemand kurz erklären was ich unter "context" genau zu verstehen habe? Hier nochmal die Mainactivity:

[Java] package com.quizapp.quizapp;

import android.app.*;
import android.content.*;
import android.graphics.drawable.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import java.util.*;
import java.io.*;

public class MainActivity extends Activity
{

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//Bekomme Buttons und objekte = = = = = = = = = = = = =
final Button buttonol =(Button) findViewById(R.id.buttonol);
final Button buttonor =(Button) findViewById(R.id.buttonor);
final Button buttonul =(Button) findViewById(R.id.buttonul);
final Button buttonur =(Button) findViewById(R.id.buttonur);
final Button buttonbg = (Button) findViewById(R.id.buttonhintergrund);
TextView meinefragebox =(TextView) findViewById(R.id.fragetext);
fragen meinefrage = new fragen();
final neustart nochmalneu = new neustart();

zuzahlen zufallszahl = new zuzahlen();
meinefrage.setfragen();
antworten antworter = new antworten();
antworter.setant();
final pruefen pruefung = new pruefen();
boolean spiellaeuft = true;
final TextView ergebntxt = (TextView) findViewById(R.id.ergebnisanzeige);
final TextView punktzahl =(TextView) findViewById(R.id.pktzahl);
int punkte = 0;
final Drawable bild2 = getResources().getDrawable(R.drawable.farbverlauf);
final Drawable bild = getResources().getDrawable(R.drawable.swhintergrund);
final LinearLayout meinlayout = (LinearLayout) findViewById(R.id.mainlayout);
// = = = = = = = = = = = = = = = = = = = = = = = = =

spiellaeuft=false;
int bu;
bu = meinefrage.anzahlfragen();
int zahl = zufallszahl.getzahl(bu);
String diefrage = meinefrage.getfragen(zahl);
meinefragebox.setText(diefrage);
int zuege = 1;
//while(spiellaeuft){
//if(zuege>0){
//=== Antworten b3kommen
ArrayList<String> dieantworten = new ArrayList<String>();
dieantworten = antworter.getantworten(zahl);

final String richtigeantwort = dieantworten.get(0);
String falschantwort1 = dieantworten.get(1);
String falschantwort2 = dieantworten.get(2);
String falschantwort3 = dieantworten.get(3);
int min = 0;
int max = 4;
int wielange = 4;

// Den Buttons die Antwortmöglichkeiten zuweisen
int position = (int) (Math.random()*max);
max = max-1;
buttonol.setText(dieantworten.get(position));
dieantworten.remove(position);
//===
position = (int) (Math.random()*max);
max = max-1;
buttonor.setText(dieantworten.get(position));
dieantworten.remove(position);
//===
position = (int) (Math.random()*max);
max = max-1;
buttonul.setText(dieantworten.get(position));
dieantworten.remove(position);
//===
position = (int) (Math.random()*max);
max = max-1;
buttonur.setText(dieantworten.get(position));
dieantworten.remove(position);
int zt = 5;
//========Den Buttons ihren zweck geben
int solange = 1;
ergebntxt.setText("");

buttonol.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{

final String a = (String) buttonol.getText();
boolean istrichtig = pruefung.pruefdich(richtigeantwort, a);
if(istrichtig){
ergebntxt.setText("Die antwort war richtig!");

}else{
ergebntxt.setText("Leider Falsch");
}
}
});

buttonor.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{
nochmalneu.neuerstarte();

final String a = (String) buttonor.getText();
boolean istrichtig = pruefung.pruefdich(richtigeantwort, a);


if(istrichtig){
ergebntxt.setText("Die antwort war richtig!");

}else{
ergebntxt.setText("Leider Falsch");
}
}
});

buttonul.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{
final String a = (String) buttonul.getText();
boolean istrichtig = pruefung.pruefdich(richtigeantwort, a);
if(istrichtig){
ergebntxt.setText("Die antwort war richtig!");

}else{
ergebntxt.setText("Leider Falsch");
}
}
});
buttonur.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{
final String a = (String) buttonur.getText();
boolean istrichtig = pruefung.pruefdich(richtigeantwort, a);
if(istrichtig){
ergebntxt.setText("Die antwort war richtig!");

}else{
ergebntxt.setText("Leider Falsch");

}
}

});
if(!"".equals(ergebntxt)){spiellaeuft=true;}
//_____________
buttonbg.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View p1)
{
// TODO: Implement this method
if(meinlayout.getBackground().equals(bild2)){
meinlayout.setBackground(bild);}else{
meinlayout.setBackground(bild2);
};
}
});


if(ergebntxt.getText().equals("Leider Falsch")){
solange = 0;
zt =0;
}else if(ergebntxt.getText().equals("Die antwort war richtig!")){
zt = 0;
solange = 0;
}

//while(zt > 0){
// int xxx = 1;
// xxx++;
//};

}



//ergebntxt.setText("Spiel zuende");
//}//ende der while spiellaeuft schleife

}[/code]

Und die neustartklasse mit dem intend:
[Java] package com.quizapp.quizapp;
import android.app.*;
import android.content.*;
import android.os.*;

class neustart extends MainActivity
{

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
{
// TODO: Implement this method
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.main);
neuerstarte();}

public void neuerstarte(){

Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
}[/code]

Wäre echt dankbau für hilfe 🙂
 

Zurück
Oben