如何更新ListView中的一行?

如何更新ListView中的一行?

我有一个ListView显示新闻。它们包含一个图像,一个标题和一些文本。映像被加载到一个单独的线程中(包含一个队列和所有的线程),当图像被下载时,我现在调用notifyDataSetChanged()在列表适配器上更新映像。这很管用,但是getView()经常被打电话,因为notifyDataSetChanged()打电话getView()所有可见的物品。我只想更新列表中的单个项目。我该怎么做?

我目前的做法有以下问题:

  1. 滚动很慢
  2. 我有一个淡入动画在图像上发生,每次一个新的图像在列表中被加载。


呼唤远方
浏览 531回答 3
3回答

墨色风雨

您确实可以使用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!");}

神不在的星期二

我就是这样做的:您的项(行)必须具有唯一的ID,以便以后可以更新它们。当列表从适配器获取视图时,设置每个视图的标记。(如果默认标记在其他地方使用,也可以使用Key标记)@Overridepublic&nbsp;View&nbsp;getView(int&nbsp;position,&nbsp;View&nbsp;convertView,&nbsp;ViewGroup&nbsp;parent){ &nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;view&nbsp;=&nbsp;super.getView(position,&nbsp;convertView,&nbsp;parent); &nbsp;&nbsp;&nbsp;&nbsp;view.setTag(getItemId(position)); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;view;}对于更新,检查列表中的每个元素,如果有一个具有给定id的视图,它是可见的,所以我们执行更新。private&nbsp;void&nbsp;update(long&nbsp;id){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;c&nbsp;=&nbsp;list.getChildCount(); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;c;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;view&nbsp;=&nbsp;list.getChildAt(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((Long)view.getTag()&nbsp;==&nbsp;id) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;update&nbsp;view &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}它实际上比其他方法更容易,并且当您处理ID而不是位置时更好!此外,您还必须调用更新的项目,使之可见。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android