2016-07-30 5 views
0

Obwohl ich die Lösungen für die verwandten Fragen auf dieser Website überprüft habe, konnte ich mein Problem nicht lösen. Ich versuche eine Quiz-App zu erstellen, die die richtige Antwort enthält, fügt 1 zur Punktzahl hinzu und aktualisiert die Punktzahl in der Punktzahl TextView. Ich habe versucht, die Score-Methode über Android: OnClick und versuchte auch die SetOnClickListener-Methoden, aber keiner von ihnen scheint zu funktionieren.Mein TextView in Android aktualisiert nicht

Das ist mein XML:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Welcome to the Canada Quiz" 
     android:textSize="16sp" 
     android:textColor="#000000" 
     android:textStyle="bold" 
     android:layout_marginBottom="16dp" 
     android:layout_gravity="center"/> 
    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Enter name" 
     android:layout_marginBottom="8dp" 
     /> 
    <TextView 
     android:id="@+id/scoreText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="4dp" 
     android:layout_marginBottom="16dp" 
     android:textColor="#000000" 
     android:textStyle="bold" 
     /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="1. What is the capital of Canada?" 
     android:textSize="20dp" 
     android:textColor="#000000" 
     android:textStyle="bold" 
     /> 
    <RadioGroup 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <RadioButton 
      android:id="@+id/tokyo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Tokyo" 
      android:layout_marginLeft="24dp" 
      android:textStyle="bold" 
      android:textSize="16dp"/> 
     <RadioButton 
      android:id="@+id/newYork" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New York" 
      android:layout_marginLeft="24dp" 
      android:textStyle="bold" 
      android:textSize="16dp"/> 
     <RadioButton 
      android:id="@+id/ottawa" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Ottawa" 
      android:layout_marginLeft="24dp" 
      android:textStyle="bold" 
      android:textSize="16dp"/> 
     <RadioButton 
      android:id="@+id/hongKong" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Hong Kong" 
      android:layout_marginLeft="24dp" 
      android:textStyle="bold" 
      android:onClick="calculateScore" 
      android:textSize="16dp"/> 

    </RadioGroup> 
    <Button 
     android:id="@+id/scoreButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Calculate score" 
     android:layout_marginTop="16dp" 
     /> 
</LinearLayout> 
</ScrollView> 

Und das ist mein Java:

public class MainActivity extends AppCompatActivity { 
    int score = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     RadioButton rb = (RadioButton)findViewById(R.id.ottawa); 
     Button calculate = (Button) findViewById(R.id.scoreButton); 
     final TextView scoreShow = (TextView) findViewById(R.id.scoreText); 

     final boolean rbChecked = rb.isChecked(); 

     calculate.setOnClickListener(new View.OnClickListener(){ 
      public void onClick (View v){ 
       if(rbChecked){ 
        score += 1; 
        scoreShow.setText("Your score is: " + score + "/10"); 
       } 
      } 
     }); 
    } 

// public void calculateScore(){ 
//  RadioButton rb = (RadioButton)findViewById(R.id.ottawa); 
//  //Button calculate = (Button) findViewById(R.id.scoreButton); 
//  TextView scoreShow = (TextView) findViewById(R.id.scoreText); 
// 
//  boolean rbChecked = rb.isChecked(); 
//  if(rbChecked){ 
//   score += 1; 
//   scoreShow.setText("Your score is: " + score + "/10"); 
//  } 
// } 
} 

Ehrlich gesagt, es sieht aus wie es wirklich funktionieren würde, aber es funktioniert nicht.

Antwort

1

Sie speichern den Wert des aktivierten Status nur, wenn die Ansicht geladen ist und nie aktualisiert wird.

Überprüfen Sie immer rb.isChecked() innerhalb des Klick-Listeners, anstatt den booleschen Wert außerhalb davon zu speichern.

+0

Dank viel. Das hat funktioniert. Aber jetzt erhöht sich mein scoreShow TextView jedes Mal, wenn ich den calculate Knopf drücke. Weißt du, wie du das findest? Ich möchte, dass mein TextView jedes Mal erhöht wird, wenn eine richtige Antwort ausgewählt wird, weil ich weitere Fragen hinzufügen werde. –

+0

Dann hören Sie auf eine Klickaktion auf der falschen Schaltfläche ... Dieser Beitrag beantwortet jedoch Ihre erste Frage, also ist es am besten, wenn Sie das Häkchen als nächstes akzeptieren und eine andere Frage stellen –

0

es sein sollte:

if(rbChecked.isChecked()){ 
     score += 1; 
     scoreShow.setText("Your score is: " + score + "/10"); 
} 
0

Sie für den Zustand der Radiobutton überprüfen müssen, wenn Benutzer klicken Sie auf Schaltfläche berechnen .... Ihr Code wie folgt sein sollte ...

calculate.setOnClickListener(new View.OnClickListener(){ 
     public void onClick (View v){ 
      rbChecked = rb.isChecked(); 
      if(rbChecked){ 
       score += 1; 
       scoreShow.setText("Your score is: " + score + "/10"); 
      } 
     } 
    }); 
Verwandte Themen