ListView 数据未在 Kotlin 中显示

Posted

技术标签:

【中文标题】ListView 数据未在 Kotlin 中显示【英文标题】:ListView data not showing in Kotlin 【发布时间】:2019-10-19 14:16:32 【问题描述】:

我正在尝试在选项卡布局下的片段中并排显示具有两个字符串值的自定义列表视图,但未显示数据。

当我运行应用程序时,什么都没有显示,只是空白屏幕。

我遵循了这个指南:javatpoint

并尝试将其应用于片段。


CustomAdapter.kt

import android.app.Activity
import android.view.View
import android.view.ViewGroup
import android.view.ViewParent
import android.widget.ArrayAdapter
import android.widget.TextView

class CustomListAdapter(private val context: Activity, private val keyName: Array<String>, private val valueName: Array<String>) : ArrayAdapter<String>(context, R.layout.customer_list_view)
override fun getView(position: Int, view: View?, parent: ViewGroup): View
    val inflater = context.layoutInflater
    val rowView = inflater.inflate(R.layout.customer_list_view, null, true)

    val keyNameText = rowView.findViewById<TextView>(R.id.keyName)
    val valueNameText = rowView.findViewById<TextView>(R.id.valueName)

    keyNameText.text = keyName[position]
    valueNameText.text = valueName[position]

    return rowView

FragmentSoftware.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

class FragmentSoftware : Fragment()
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? 
    val fragmentVar: View = inflater.inflate(R.layout.software_fragment, container, false)

    val names = arrayOf("Tesla", "BMW", "Audi", "Tata", "Ford", "Honda", "Jaguar", "Mustang", "Mercedes", "Lamborghini", "Tesla", "BMW", "Audi", "Tata", "Ford", "Honda", "Jaguar", "Mustang", "Mercedes", "Lamborghini")
    val values = arrayOf("Tesla", "BMW", "Audi", "Tata", "Ford", "Honda", "Jaguar", "Mustang", "Mercedes", "Lamborghini", "Tesla", "BMW", "Audi", "Tata", "Ford", "Honda", "Jaguar", "Mustang", "Mercedes", "Lamborghini")


    val fragmentListView = fragmentVar.findViewById<ListView>(R.id.listView2)
    fragmentListView.adapter = CustomListAdapter(requireActivity(), names, values)

 return fragmentVar

software_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:gravity="center">
    <ListView
            android:layout_
            android:layout_
            android:id="@+id/listView2"/>
</LinearLayout>

custom_list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:orientation="horizontal">

        <TextView
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:id="@+id/keyName"
                android:paddingStart="20dp"
                android:paddingEnd="20dp"
                android:paddingTop="8dp"
                android:paddingBottom="8dp"
                android:textStyle="bold"
                android:textColor="#000000"/>
    <TextView
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:id="@+id/valueName"
            android:paddingStart="20dp"
            android:paddingEnd="20dp"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:textStyle="bold"
            android:textColor="#000000"/>
</LinearLayout>

【问题讨论】:

您可以使用RecyclerView 和 GridLayoutManager @MuthuS 是的,好多了。 【参考方案1】:

你仍然需要重写适配器中的一些方法,最重要的是getCount()

//1
override fun getCount(): Int 
  return keyName.size


//2
override fun getItem(position: Int): Any 
  return keyName[position]


//3
override fun getItemId(position: Int): Long 
  return position.toLong()

【讨论】:

这里的dataSource是什么? 非常感谢。在 getItem 函数中,Any 给出了一个错误,所以我将其更改为 String 并且它按预期工作 - 它是否正确?你能指导我了解一些关于 ArrayAdapter 在这里如何工作的信息吗?任何好的资源也可以:D 在这里查看这个很棒的教程:raywenderlich.com/155-android-listview-tutorial-with-kotlin,它将向您解释您需要的关于 listview 、适配器等的一切......【参考方案2】:

您可以使用带有 GridLayoutManager 的 RecyclerView。你可以增加你需要的跨度数。 Clone this :) 快乐编码:)

【讨论】:

编码愉快:) 祝你好运:)

以上是关于ListView 数据未在 Kotlin 中显示的主要内容,如果未能解决你的问题,请参考以下文章

AndroidX 迁移后,ListView 未在 OnCreate/OnStart 上显示任何数据

Listview 项目未在 Fragment Android 中显示

未在 Searchview 中显示正确的 Listview 项目

选定的项目未在微调器 kotlin 中显示

ArrayAdapter 未在 ListView、Android Studio 中显示添加的元素

Intellij IDEA 未在 Kotlin 文件中显示有关 android 资源的可用建议