You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio测验应用Activity间整数传递未更新问题求助

解决Activity间传递累计答对题数的问题

嘿,我明白你现在遇到的问题了——刚入门Android Studio,想在不同题目页面之间累计答对的题数,但第一题答对后第二个页面的数值没变化对吧?这其实是新手常踩的坑,我来给你捋清楚问题出在哪,以及怎么解决。

问题的核心原因

你在Question1里定义的correctAnswers是这个Activity的成员变量,每个Activity都是独立的实例,它不会自动跑到下一个Activity里去。你必须通过Intent显式把这个数值传递过去,不然第二个Activity根本拿不到这个值。

快速修复方案:用Intent传递数据

第一步:在Question1中传递数值

当用户答对第一题后,先把计数加1,然后把这个值放进Intent再启动下一个Activity:

public class Question1 extends AppCompatActivity {
    private int correctAnswers = 0;

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

        // 假设这是用户答对题目触发的代码(比如点击正确选项的按钮事件)
        Button correctOption = findViewById(R.id.btn_correct);
        correctOption.setOnClickListener(v -> {
            // 答对后计数+1
            correctAnswers++;
            // 创建Intent,指定要跳转的Activity
            Intent intent = new Intent(Question1.this, Question2.class);
            // 把正确答案数放入Intent,用一个常量作为key(方便后续取出)
            intent.putExtra("KEY_CORRECT_ANSWERS", correctAnswers);
            // 启动第二个Activity
            startActivity(intent);
        });
    }
}

第二步:在Question2中接收数值

在第二个Activity的onCreate方法里,从Intent中取出传递过来的数值:

public class Question2 extends AppCompatActivity {
    private int correctAnswers;

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

        // 获取启动当前Activity的Intent
        Intent receivedIntent = getIntent();
        if (receivedIntent != null) {
            // 取出数值,第二个参数是默认值(如果没取到就用0)
            correctAnswers = receivedIntent.getIntExtra("KEY_CORRECT_ANSWERS", 0);
            // 这里可以测试一下,比如打印到日志或者显示在TextView里
            Log.d("Question2", "累计答对题数:" + correctAnswers);
        }
    }
}

更优雅的方案:用ViewModel管理全局计数

如果你的测验有很多题目页面,每次都用Intent传值会很麻烦,而且容易出错。这时候可以用Android的ViewModel来统一管理累计的题数,它能在多个Activity之间共享数据,还能在屏幕旋转等配置变化时保留数据。

第一步:创建共享的ViewModel

import androidx.lifecycle.ViewModel;

public class QuizViewModel extends ViewModel {
    private int totalCorrectAnswers = 0;

    // 答对一题时调用这个方法
    public void addCorrectAnswer() {
        totalCorrectAnswers++;
    }

    // 获取累计的答对题数
    public int getTotalCorrectAnswers() {
        return totalCorrectAnswers;
    }
}

第二步:在Question1中使用ViewModel

public class Question1 extends AppCompatActivity {
    private QuizViewModel quizViewModel;

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

        // 获取ViewModel实例,确保所有Activity拿到同一个对象
        quizViewModel = new ViewModelProvider(this).get(QuizViewModel.class);

        Button correctOption = findViewById(R.id.btn_correct);
        correctOption.setOnClickListener(v -> {
            // 答对后更新计数
            quizViewModel.addCorrectAnswer();
            // 直接启动下一个Activity,不用传Intent了
            startActivity(new Intent(Question1.this, Question2.class));
        });
    }
}

第三步:在Question2中获取累计数值

public class Question2 extends AppCompatActivity {
    private QuizViewModel quizViewModel;

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

        // 获取同一个ViewModel实例
        quizViewModel = new ViewModelProvider(this).get(QuizViewModel.class);
        // 拿到累计的答对题数
        int totalCorrect = quizViewModel.getTotalCorrectAnswers();
        // 这里就可以用这个数值做你想做的事啦
    }
}

这样不管你有多少个题目页面,都不用再手动传值了,ViewModel会帮你把计数管理得明明白白~

内容的提问来源于stack exchange,提问作者Charles Thrift

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:57:33