kotlin “%1$s”显示在格式正确的变量文本旁边的格式化资源字符串中

3phpmpom  于 2022-12-13  发布在  Kotlin
关注(0)|答案(1)|浏览(272)

我在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非常陌生。

o4tp2gmn

o4tp2gmn1#

原来是复制粘贴错误。很抱歉浪费你的时间;我不小心从另一个Activity中调用了一个类似对话框的完全限定版本,而不是在所讨论的类中定义的那个。现在,两个相同的类在一个文件中定义,并且由两个Activity使用。

  • 死于尴尬 *

相关问题