Android Kotlin-如何在对话框中连接XML字符串
我有一个选择题测验应用程序。如果用户回答不正确,则会出现一个对话框,显示XML中的字符串(期刊/书籍的引用) 根据问题的不同,我可能需要硬编码文本和一个或多个字符串显示在对话框中。考虑到字符串的数量和可能的安排,将每个问题所需的字符串组合到新的字符串资源中会很麻烦 是否有一种方法可以将硬编码文本与多个字符串资源连接起来,以显示在同一对话框中 例如:Android Kotlin-如何在对话框中连接XML字符串,android,kotlin,Android,Kotlin,我有一个选择题测验应用程序。如果用户回答不正确,则会出现一个对话框,显示XML中的字符串(期刊/书籍的引用) 根据问题的不同,我可能需要硬编码文本和一个或多个字符串显示在对话框中。考虑到字符串的数量和可能的安排,将每个问题所需的字符串组合到新的字符串资源中会很麻烦 是否有一种方法可以将硬编码文本与多个字符串资源连接起来,以显示在同一对话框中 例如: "This is the reason why your answer was incorrect" String citati
"This is the reason why your answer was incorrect"
String citation 1
String citation 2
XML
数据类
data class Questions2(val id: Int, val question: String, val option1: String, val option2: String, val option3: String, val option4: String, val correctAnswer: Int, val dialogBox: Int)
例如,对于q1,我只需要1个字符串值,q2,2个字符串值,q3,硬编码字符串加上2个字符串值。给定的应用程序崩溃R.string.Johnson_1982+R.string.Kelly_2006
object ConstantsAnalysis {
const val TOTAL_CORRECT: String = "total_correct"
const val TOTAL_OPP: String = "total_opp"
fun getQuestions2(): ArrayList<Questions2> {
val questionList = ArrayList<Questions2>()
val options = ArrayList<TextView>()
val q1 = Questions2(1, "Question A:","A","B","C","D", 3, R.string.Johnson_1982)
val q2 = Questions2(2, "Question B:","A","B","C","D", 2, R.string.Johnson_1982 + R.string.Kelly_2006)
val q3 = Questions2(3, "Question C:","A","B","C","D", 1, "Reason why answer is incorrect" + R.string.Johnson_1982 + R.string.Kelly_2006)
questionList.addAll(listOf(q1, q2, q3))
questionList.shuffle()
return questionList
}
}
对象常量分析{
const val TOTAL\u CORRECT:String=“TOTAL\u CORRECT”
const val TOTAL\u OPP:String=“TOTAL\u OPP”
趣味getQuestions2():ArrayList{
val questionList=ArrayList()
val options=ArrayList()
val q1=问题2(1,“问题A:”,“A”,“B”,“C”,“D”,3,R.string.Johnson_1982)
val q2=问题2(2,“问题B:”,“A”,“B”,“C”,“D”,2,R.string.Johnson_1982+R.string.Kelly_2006)
val q3=问题2(3,“问题C:”,“A”,“B”,“C”,“D”,1,“答案不正确的原因”+R.string.Johnson_1982+R.string.Kelly_2006)
问题列表.添加全部(列表(第一季度、第二季度、第三季度))
questionList.shuffle()
返回问题列表
}
}
如果我创建第二个对话框来连接第一个对话框,应用程序就会崩溃(即dialogBuilder.setMessage(questions2.dialogBox+questions2.dialogBox2!!)
dialogBuilder.setMessage(“回答不正确的原因”+问题2.dialogBox)
这是因为R.string.Johnson_1982是对字符串资源的引用,而不是字符串本身。您需要的是:
getString(R.string.Johnson_1982)
上面的类为您提供字符串的文本值
因此,请按以下方式更改代码:
class ConstantsAnalysis (context: Context) {
...
val q1 = Questions2(1, "Question A:","A","B","C","D", 3, context.getString(R.string.Johnson_1982))
}
将对象更改为类并按以下方式使用:
class ConstantsAnalysis (context: Context) {
...
val q1 = Questions2(1, "Question A:","A","B","C","D", 3, context.getString(R.string.Johnson_1982))
}
解决方案:
我为文本和字符串创建了单独的变量。我还重新格式化了代码,以便在其中一个对话框为null时进行处理
新数据类
data class Questions2(id: Int, val image: Int?, val question: String, val option1: String, val option2: String, val option3: String, val option4: String, val correctAnswer: Int, val answerString: String, val dialogBox: Int?, val dialogBox2: Int?)
新建对话框
if (questions2!!.correctAnswer != mSelectedOptionPosition) {
answerView(mSelectedOptionPosition, R.drawable.incorrect_option_border_bg)
val dialogBuilder = AlertDialog.Builder(this)
when {
questions2.dialogBox!=null && questions2.dialogBox2!=null -> {
dialogBuilder.setMessage(questions2.answerString + "\n\n" + getString(questions2.dialogBox) + "\n\n" + getString(questions2.dialogBox2))
.setCancelable(true)
.setNegativeButton(
"Close"
) { dialog, id ->
dialog.cancel()
}
val alert = dialogBuilder.create()
alert.show()
}
questions2.dialogBox!=null && questions2.dialogBox2 == null -> {
dialogBuilder.setMessage(questions2.answerString + "\n\n" + getString(questions2.dialogBox))
.setCancelable(true)
.setNegativeButton(
"Close"
) { dialog, id ->
dialog.cancel()
}
val alert = dialogBuilder.create()
alert.show()
}
}
}
这将产生以下错误:未解析的引用:getString
if (questions2!!.correctAnswer != mSelectedOptionPosition) {
answerView(mSelectedOptionPosition, R.drawable.incorrect_option_border_bg)
val dialogBuilder = AlertDialog.Builder(this)
when {
questions2.dialogBox!=null && questions2.dialogBox2!=null -> {
dialogBuilder.setMessage(questions2.answerString + "\n\n" + getString(questions2.dialogBox) + "\n\n" + getString(questions2.dialogBox2))
.setCancelable(true)
.setNegativeButton(
"Close"
) { dialog, id ->
dialog.cancel()
}
val alert = dialogBuilder.create()
alert.show()
}
questions2.dialogBox!=null && questions2.dialogBox2 == null -> {
dialogBuilder.setMessage(questions2.answerString + "\n\n" + getString(questions2.dialogBox))
.setCancelable(true)
.setNegativeButton(
"Close"
) { dialog, id ->
dialog.cancel()
}
val alert = dialogBuilder.create()
alert.show()
}
}
}