如何在ArrayAdapter中一次更新一个视图?

时间:2010-09-30 07:12:51

标签: java android listview android-arrayadapter listadapter

我希望能够访问我的ArrayAdapter视图:

public View getView(int position, View convertView, ViewGroup parent)

我不确定如何访问它:

View myView = myArrayAdapter.getView(myPosition, myView, ?);

我不确定如何获得ViewGroup父级?

2 个答案:

答案 0 :(得分:1)

据我所知,您并不认为Adapter通常会作为AdapterView实例的来源,因此getView合同如下:
在参数中:inPositionconvertView,viewParent
结果:查看女巫将显示在位置inPosition,您可以使用convertView绑定数据,如果它不为空,则返回的视图将附加到viewParent

因此,如果您想要获取特定位置的适配器视图显示的视图,为什么不调用

AdapterView<?> adapterView = getAdapterView();
View myView = adapterView.getChildAt(position);

如果您想更改在特定位置显示视图的方式,请使用

Adapter myAdapter = getAdapter();
//change data inside adapter
myAdapter.notifyDataSetChanged();

答案 1 :(得分:0)

<强>更新

尝试向数据集中的数据添加字段,该数据集包含返回视图时要使用的背景资源/颜色,以及在getView中

holder.background = dataSet.get(position).getBackground()

如果你不知道我正在谈论这个持有人的事情,请检查How to load the Listview "smoothly" in android

<强>旧

我会说包含适配器的 ListView 是父ViewGroup。

无论如何,为什么不使用包含ArrayAdapter的ListView? ListView是Views 的容器,而不是适配器,它只保存数据集合,并在ListView请求时按需创建和返回Views(f.e,滚动时)。即使您能够获取位置X的视图,我也会说这不起作用,因为您作为参数传递的convertView不是 ListView 持有的显示。

考虑到在ListView中,在任何给定时刻最多有7-8个视图被膨胀(我不知道确切的数字),而ListView所做的是通过调用适配器的来填充它们getview

这就是说,要更新单行(单个视图),您需要更新适配器的数据集合。然后,推测,尝试从ListView获取该视图并使其无效,但我怀疑这会起作用。

我认为这些概念是正确的,如果他们错了,如果有人纠正我,我将不胜感激。

为什么一次只更新一个视图?