【发布时间】:2019-12-02 12:45:58
【问题描述】:
在 ListView 中使用 BaseAdapter 时,notifyDataSetChanged 不起作用。
代码如下。
class AFragment(val mContext: Context, b: ArrayList<CustomData>) : Fragment() {
var a: ArrayList<CustomData> = ArrayList<CustomData>()
init{
a.clear()
a.addAll(b)
}
下面的代码是Fragment中的setListView(这段代码被Activity(AFragment的parents)调用)
fun setListView(c: ArrayList<CustomData>) {
a.clear()
a.addAll(c)
mAdapter.notifyDataSetChanged(a)
}
下面的代码是CustomAdapter。
class CustomerAdapter(val context: Context?, d: ArrayList<CustomData>) : BaseAdapter() {
var z: ArrayList<CustomData> = d
fun notifyDataSetChanged(f: ArrayList<CustomData>) {
z.clear()
z.addAll(f)
notifyDataSetChanged()
}
还确认适配器内的'notifyDataSetChanged(arrayList)'调用正常,上下文不为空,数据全部接收完毕。
为什么...为什么它不起作用...?请帮帮我.....;(
!!!适配器 notifyDataSetChanged 不起作用。所以.. ArrayList 已更改但未反映在 ListView 中。
class CustomAdapter(val context: Context?, arrayList: ArrayList<CustomAdapter>) : BaseAdapter() {
var mArrayList: ArrayList<CustomAdapter> = arrayTrt
fun notifyDataSetChanged(arrayList: ArrayList<CustomData>) {
mArrayList.clear()
mArrayList.addAll(arrayList)
notifyDataSetChanged()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view = LayoutInflater.from(context)....
return view
}
override fun getItem(position: Int): Any {
return mArrayList[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getCount(): Int {
return mArrayList.size
}
}
【问题讨论】:
-
你从来没有说过什么是不工作。您希望发生什么没有发生的事情?
-
Holly... notifyDataSetChaged() 不起作用... ;( ... 适配器未刷新...!
-
请为您的适配器添加完整的代码。
-
我粘贴了适配器
-
你有很多不同的
ArrayList变量——mArrayList在Fragment、mArrayTrt、aArrayList、arrayList、mArrayList在Adapter中——很可能有些混淆了,指向同一个对象,清除一个你认为没有被清除的对象,等等。我们可能需要minimal reproducible example 来解决这个问题,包括你如何实例化@987654334 @,然后从Activity刷新它。
标签: android kotlin adapter baseadapter notifydatasetchanged