我在strings.xml中有以下字符串:<string name="end_test_msg">Your score is: %1$s%%</string>
我在一个DialogFragment构建器中使用这个作为.setMessage函数的参数(score是一个来自float或int的String):
class EndTestDialogFragment(percent: Double) : DialogFragment() {
//Converts percent to a string, truncates ".00" if it's a whole number.
private val score: String = when(percent.compareTo(percent.toInt()) == 0) {
true -> percent.toInt().toString()
false -> String.format("%.2f", percent)
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = AlertDialog.Builder(it)
builder.setTitle(getString(R.string.end_test_title))
builder.setMessage(getString(R.string.end_test_msg, score))
.setPositiveButton(getString(R.string.ok),
DialogInterface.OnClickListener { dialog, id ->
this.activity?.finish()//Return to the MainActivity
})
// Create the AlertDialog object and return it
builder.setCancelable(false)
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
}
而不是得到“你的分数是:50%”(或任何适当的数字)对话框显示“您的分数是:%1$s%% 50%"。无论score是来自.toInt()...还是来自格式化的double,它都会执行此操作。我做错了什么?奇怪的是,我同时看到占位符和正确格式的字符串。
如果EndTestDialog类的位置很重要,则在使用它的Activity中定义该类。当我在Activity中(但在TextView中,而不是在Dialog中)使用完全相同的公式时,它显示良好,不显示占位符。
请原谅我忽略了显而易见的事实;我对Android/Kotlin非常陌生。
1条答案
按热度按时间o4tp2gmn1#
原来是复制粘贴错误。很抱歉浪费你的时间;我不小心从另一个Activity中调用了一个类似对话框的完全限定版本,而不是在所讨论的类中定义的那个。现在,两个相同的类在一个文件中定义,并且由两个Activity使用。