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

Android测验APP如何将题目作答等数据传递到下一个Activity D

Android测验APP跨Activity传递答题数据方案

这就是我要实现的「ACTIVITY D」效果

1. 首先定义可序列化的答题数据实体类

推荐使用Android原生的Parcelable实现,性能远高于Serializable,Kotlin代码示例:

import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class QuestionAnswerItem(
    val questionContent: String, // 题干内容
    val options: List<String>, // 所有选项
    val userSelectedAnswer: String, // 用户选中的答案
    val correctAnswer: String // 正确答案
) : Parcelable

如果使用Java开发,自行实现Parcelable接口即可。

2. 答题过程中实时维护数据列表

在答题页维护一个全局的MutableList<QuestionAnswerItem>,每道题用户提交答案后,就将当前题的题干、选项、用户选择、正确答案封装成QuestionAnswerItem存入列表,5道题全部作答完成后,你就已经得到了完整的答题数据集合,全程不需要二次查询Firestore。

3. 跨Activity传递数据到Activity D

两种常用实现方案,都不需要访问数据库:

方案1:Intent直接传递(推荐小数据量场景,你的5道题完全适用)

Activity B跳转时写入数据:

// Activity B 跳转逻辑
val intent = Intent(this, ActivityD::class.java)
intent.putParcelableArrayListExtra("answer_report", ArrayList(yourQuestionAnswerList))
startActivity(intent)

Activity D接收数据:

// Activity D onCreate 中接收
val reportList = intent?.getParcelableArrayListExtra<QuestionAnswerItem>("answer_report") ?: emptyList()
// 后续直接用这个列表渲染页面即可

方案2:单例临时存储(适合数据量更大的场景)

创建临时存储的单例类:

object AnswerReportHolder {
    var reportList: List<QuestionAnswerItem>? = null
}

Activity B跳转前存入数据:

AnswerReportHolder.reportList = yourQuestionAnswerList
startActivity(Intent(this, ActivityD::class.java))

Activity D取数据,用完立即置空避免内存泄漏:

val reportList = AnswerReportHolder.reportList ?: emptyList()
AnswerReportHolder.reportList = null // 必须置空,防止内存泄漏和脏数据

注意事项

  • 不需要用SharedPreferences存储这类临时传递的数据,性能差完全没必要
  • 如果项目使用Jetpack组件,也可以用Activity级别的共享ViewModel实现数据共享,逻辑更简洁
  • 所有数据均在答题过程中存入内存,全程无额外数据库请求

内容的提问来源于stack exchange,提问作者Kumar Harsh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:18:02