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

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
相关产品推荐
相关产品推荐

