在Kotlin中创建自定义数组适配器时出错

0vvn1miw  于 2023-01-05  发布在  Kotlin
关注(0)|答案(1)|浏览(178)

我已经创建了一些自定义阵列适配器,它们都可以工作。我创建了这个像其他的一样,但我一直得到这个错误:
"安卓系统.视图.膨胀异常:只能与有效的ViewGroup根和attachToRoot = true一起使用"
我的阵列适配器:

class CustomArrayAdapter(private val context: Activity, private val customList : ArrayList<Component>)
: ArrayAdapter<Component>(context, R.layout.customcardcomponent, customList) {

@SuppressLint("ViewHolder")
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {

    val view = LayoutInflater.from(context).inflate(R.layout.customcardcomponent, parent, false)

    val description: TextView = view.findViewById(R.id.Description)
    val progressText : TextView = view.findViewById(R.id.ProgressBarText)
    val progressBar : LinearProgressIndicator = view.findViewById(R.id.ProgressBar)

    description.text = customList[position].description
    progressText.text = "${customList[position].current}/${customList[position].max}"
    progressBar.max = customList[position].max
    progressBar.progress = customList[position].current

    return view
    }
}

我的列表视图页面. kt文件

class ListViewPage : Fragment() {

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view = inflater.inflate(R.layout.fragment_listview, container, false)
    val customListView = view.findViewById<ListView>(R.id.customListView)

    val listDescriptions = arrayOf(
        "description 1",
        "description 2",
        "description 3",
        "description 4",
    )
    val listMax = arrayOf(5, 10, 25, 50)
    val listCurrent = arrayOf(current, current, current, current)

    val customList : ArrayList<Component> = ArrayList()
    for (i in listDescriptions.indices){
        val component = Component(listMax[i], listCurrent[i] ,listDescriptions[i])
        customList.add(component)
        if (customList.size == 4){
            customListView.adapter = CustomArrayAdapter(context as Activity, customList)
        }
    }

    return view
    }
}

我的列表视图页面. xml文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/customListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@null"
        android:dividerHeight="0dp"/>

</FrameLayout>

在ArrayAdapter中,我尝试:
更改{布局充气机.来自(上下文).充气(R.布局.自定义卡组件,父,假)}
到{layoutinflater. from(上下文). inflate(R.布局.自定义卡组件,父,真)}
但我得到以下错误:"java. lang.不支持的操作异常:AdapterView中不支持addView(视图、布局参数)"
我还尝试为这个列表视图创建一个完整的自定义类,但仍然得到同样的错误。
我想知道这个ArrayAdapter有什么问题

h5qlskok

h5qlskok1#

下面是你应该仔细研究的片段中的一行:

customListView.adapter = CustomArrayAdapter(context as Activity, customList)

你不能把你的片段当作一个活动
如果您想引用片段上下文,您可能想使用requireContext()requireActivity()代替if(context as Activity)
您还可能希望将适配器的class first参数从activity更改为Fragment或yourFragmentName

相关问题