Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin-如何在对话框中连接XML字符串_Android_Kotlin - Fatal编程技术网

Android Kotlin-如何在对话框中连接XML字符串

Android Kotlin-如何在对话框中连接XML字符串,android,kotlin,Android,Kotlin,我有一个选择题测验应用程序。如果用户回答不正确,则会出现一个对话框,显示XML中的字符串(期刊/书籍的引用) 根据问题的不同,我可能需要硬编码文本和一个或多个字符串显示在对话框中。考虑到字符串的数量和可能的安排,将每个问题所需的字符串组合到新的字符串资源中会很麻烦 是否有一种方法可以将硬编码文本与多个字符串资源连接起来,以显示在同一对话框中 例如: "This is the reason why your answer was incorrect" String citati

我有一个选择题测验应用程序。如果用户回答不正确,则会出现一个对话框,显示XML中的字符串(期刊/书籍的引用)

根据问题的不同,我可能需要硬编码文本和一个或多个字符串显示在对话框中。考虑到字符串的数量和可能的安排,将每个问题所需的字符串组合到新的字符串资源中会很麻烦

是否有一种方法可以将硬编码文本与多个字符串资源连接起来,以显示在同一对话框中

例如:

"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()
                    }
                }
            }