他们没有带 ArrayAdapter 的 DSL

Anko DSL with ArrayAdapter

今天我一直致力于将我的一个应用程序转换为纯 Kotlin 构建作为测试。我目前正在与阵列适配器作斗争,并收到此错误。

File  from xml type layout resource ID #0x7f0c000a

这是我的 activity 有错误。

class KotlinTest : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val arr = Array(5, Int::toString)

        verticalLayout {


            id = R.id.test_text_layout

            textView {
                width = matchParent
                height = matchParent
                id = R.id.test_text_item
            }


            listView {
                id = R.id.test_text_view
            }
        }

        val cardAdapter: ArrayAdapter<String>? = ArrayAdapter(ctx, R.id.test_text_layout, arr)

        val tempView: ListView = findViewById(R.id.test_text_view) as ListView

        tempView.adapter = cardAdapter

        cardAdapter?.notifyDataSetChanged()

    }

}

这是 ids.xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="test_text_item" type="id"/>
    <item name="test_text_view" type="id"/>
    <item name="test_text_layout" type="id"/>

</resources>

我已经尝试了一些方法但没有成功,所以任何指导将不胜感激。我想我只是错过了一些愚蠢的东西。

删除这一行<item name="test_text_layout" type="id"/>

res/layout 目录中创建文件,将其命名为 test_text_layout.xml 并添加以下内容

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

在 activity 的代码中

val cardAdapter = ArrayAdapter(ctx, R.layout.test_text_layout, arr)

问题原因 - 您传递了错误的参数。来自 documentation

resource int: The resource ID for a layout file containing a TextView to use when instantiating views.

如果你想完全摆脱xml,那么你需要扩展ArrayAdapter