为什么 Android 设备上不显示工作日对象列表?Kotlin 列表视图



我正在编写我的第一个Android规划应用程序。 我有一个导航抽屉和一个WeekListFragment。在片段中,我创建了一个 WeekDay 对象数组,并尝试通过 WeekAdapter 显示它们。但是当我运行 Android 模拟器时,尽管片段打开,但什么都不会显示。你能解释一下我应该怎么做吗?

下面是此片段的代码:

package itshpit.com.myapplication
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.Fragment
import itshpit.com.myapplication.classes.WeekDay
class WeekListFragment() : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view: View? = inflater.inflate(R.layout.fragment_week, container, false)
(activity as MainActivity).supportActionBar!!.title = "Week"
val week: Array<String> = resources.getStringArray(R.array.week)
val weekList: ArrayList<WeekDay> = ArrayList()
weekList.add(WeekDay(text = "some Text", image = R.drawable.mon, id = 1))
weekList.add(WeekDay(text = "some Text", image = R.drawable.mon, id = 2))
weekList.add(WeekDay(text = "some Text", image = R.drawable.mon, id = 3))
weekList.add(WeekDay(text = "some Text", image = R.drawable.mon, id = 4))
weekList.add(WeekDay(text = "some Text", image = R.drawable.mon, id = 5))
weekList.add(WeekDay(text = "some Text", image = R.drawable.mon, id = 6))
weekList.add(WeekDay(text = "some Text", image = R.drawable.mon, id = 7))
val adapter = WeekAdapter((activity as MainActivity), weekList)
return view
}
class WeekAdapter(context: Context, val weekList: List<WeekDay>) : ArrayAdapter<WeekDay>(context, 0, weekList) {
private class ViewHolder(row: View?) {
var txtName: TextView
var ivImage: ImageView
init {
this.txtName = row?.findViewById(R.id.txtWeekDay) as TextView
this.ivImage = row.findViewById(R.id.imgWeekDay) as ImageView
}
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view: View?
val viewHolder: ViewHolder
if (convertView == null) {
val layout = LayoutInflater.from(context)
view = layout.inflate(R.layout.week_item, parent, false)
viewHolder = ViewHolder(view)
view.tag = viewHolder
} else {
view = convertView
viewHolder = view.tag as ViewHolder
}
val weekDay: WeekDay = getItem(position) as WeekDay
viewHolder.txtName.text = weekDay.text
viewHolder.ivImage.setImageResource(weekDay.image)

return view as View
}
override fun getItemId(position: Int): Long {
return weekList[position].id
}
override fun getItem(position: Int): WeekDay? {
return weekList.get(position)
}
override fun getCount(): Int {
return 7
}
}
}

平日课程代码如下:

data class WeekDay(var id: Long = -1,
var date: Date? = null,
var text: String,
var image: Int
) {}

"fragment_week.xml"文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".WeekListFragment">
<ListView
android:id="@+id/weekList"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</RelativeLayout>

您从未将适配器分配给列表视图。

首先,您需要对列表视图的引用。把它放在你的回程线之前:

val weekList: ListView = findViewById(R.id.weekList)

请注意,如果使用 Kotlin Android 扩展(默认情况下,新的 Android 项目会这样做(,则无需执行此步骤。Kotlin Android 扩展程序会自动为您的视图 ID 生成属性。

然后调用删除您现有的val adapter = ...行并执行以下操作:

weekList.adapter = WeekAdapter(context, weekList)

请注意,我将(activity as MainActivity)更改为context。这是因为您的适配器只在其构造函数中请求context

最新更新