片段错误 Kotlin 中的列表视图



KT 的新手。 我在实现我的列表视图时遇到了一些错误。不完全确定为什么我有这些问题。是因为它扩展了一个片段吗?有人可以指出我正确的方向吗?

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ListView
import android.widget.ArrayAdapter
class Chatroom : Fragment() {
private lateinit var listView ListView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
var listView = findViewById(R.id.chatroom_list_view) as ListView
val testList = "hu, tu, su, send, pe, t"
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, testList)
listView.adapter = adapter

// Inflate the layout for this fragment
return inflater.inflate(R.layout.chatroom, container, false)
}

错误

错误图片

。.xml

<ListView
android:id="@+id/chatroom_list_view"
android:layout_width="368dp"
android:layout_height="436dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toTopOf="@+id/messageTextField"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/search" />

像这样更改代码。

class Chatroom : Fragment() {
private lateinit var listView: ListView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.chatroom, container, false)
listView = rootView.findViewById(R.id.chatroom_list_view)
val testList = arrayOf("hu", "tu", "su", "send", "pe", "t")
val adapter = ArrayAdapter(context, android.R.layout.simple_list_item_1, testList)
listView.adapter = adapter

return rootView
}

需要注意的几件事

private lateinit var listView ListView

这将引发错误,因为您尚未声明对象"listView"的类型。

在 kotlin 中,对象类型在对象名称后面的冒号后面声明,即。

private lateinit var listView: ListView

下一个

listView = rootView.findViewById(R.id.chatroom_list_view) as ListView

Kotlin 使用 kotlin 扩展 (kotlinx(,它在上下文中搜索视图层次结构中属于所分配对象类型的 ID。只要说就足够了

listView = rootView.chatroom_list_view

根视图在哪里

rootView = inflater.inflate(R.Layout.chatroom, container, false)

在使用该视图中的任何子项之前,必须声明该视图。

接下来是

val testList = "hu, tu, su, send, pe, t"

隐式类型,字符串

如果您查看文档,ArrayAdapter(以您想要的方式声明(将几种类型作为第三个参数,其中未提及字符串。

请参阅 Kotlin 参考手册,了解如何声明字符串数组。

最后要注意的事情

ArrayAdapter(this,..,..)

在此范围内,这是您的片段。这不是上下文。用:

context

它调用片段getContext((的 getter 属性方法。或:

activity

这将返回您的活动上下文。