Android中的TextView不会更新

时间:2016-07-30 14:25:43

标签: java android

虽然我已经在本网站查看了相关问题的解决方案,但我无法解决我的问题。我正在尝试构建一个获得正确答案的测验应用程序,在分数上加1并更新分数TextView上的分数。我尝试通过android:onClick调用score方法,并尝试了setOnClickListener方法,但它们似乎都没有工作。

这是我的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>

这是我的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");
//        }
//    }
}

老实说,它看起来确实会起作用,但事实并非如此。

3 个答案:

答案 0 :(得分:1)

You are only storing the value of the checked state when the view is loaded and it never is updated.

Always check rb.isChecked() inside the click listener instead of storing the boolean value outside of it.

答案 1 :(得分:0)

应该是:

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

答案 2 :(得分:0)

当用户点击计算按钮时,您需要检查radiobutton的状态....您的代码应该是这样的......

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