如何更新ListView中的一行?我有一个ListView显示新闻。它们包含一个图像,一个标题和一些文本。映像被加载到一个单独的线程中(包含一个队列和所有的线程),当图像被下载时,我现在调用notifyDataSetChanged()在列表适配器上更新映像。这很管用,但是getView()经常被打电话,因为notifyDataSetChanged()打电话getView()所有可见的物品。我只想更新列表中的单个项目。我该怎么做?我目前的做法有以下问题:滚动很慢我有一个淡入动画在图像上发生,每次一个新的图像在列表中被加载。
3 回答
![?](http://img1.sycdn.imooc.com/54585094000184e602200220-100-100.jpg)
墨色风雨
TA贡献1853条经验 获得超6个赞
您确实可以使用View#getChildAt(int index)
..问题是它从第一个可见项开始计数。事实上,你只能得到可见的项目。你用ListView#getFirstVisiblePosition()
.
例子:
private void updateView(int index){ View v = yourListView.getChildAt(index - yourListView.getFirstVisiblePosition()); if(v == null) return; TextView someText = (TextView) v.findViewById(R.id.sometextview); someText.setText("Hi! I updated you manually!");}
![?](http://img1.sycdn.imooc.com/545847d40001cbef02200220-100-100.jpg)
神不在的星期二
TA贡献1963条经验 获得超6个赞
@Overridepublic View getView(int position, View convertView, ViewGroup parent){ View view = super.getView(position, convertView, parent); view.setTag(getItemId(position)); return view;}
private void update(long id){ int c = list.getChildCount(); for (int i = 0; i < c; i++) { View view = list.getChildAt(i); if ((Long)view.getTag() == id) { // update view } }}
- 3 回答
- 0 关注
- 530 浏览
添加回答
举报
0/150
提交
取消