【发布时间】:2014-02-05 10:02:56
【问题描述】:
所以我在ListView 中有一个作业名称列表,它是由扩展BaseAdapter 的自定义适配器生成的。所有项目最初都显示为灰色。对于每个项目,我通过 Web 服务发送一个异步请求,以获取该作业的状态。同时,我在每一行都显示了一个不定的进度条。每次收到响应时,都会为该特定项目调用回调方法 onSuccess(int itemPosition)。 itemPosition 是列表中项目的索引。在这种方法中,我想根据收到的状态设置文本的颜色并删除进度条。我尝试了以下方法,但没有成功:
public void onSuccess(int itemPosition, int status) {
View convertView = getLayoutInflater().inflate(R.layout.rowlayout, null);
((ProgressBar)convertView.findViewById(R.id.progressbar)).setVisibility(ProgressBar.GONE);
if(status == READY)
((TextView)convertView.findViewById(R.id.jobname))
.setTextColor(status == READY ? Color.GREEN : Color.RED);
mListViewAdapter.getView(itemPosition, convertView, null);
}
任何想法我应该如何处理?
【问题讨论】:
-
不要调用 getView 你自己。始终修改底层数据,通知适配器,让其处理视图的刷新。
-
谢谢,但我有以下问题。该列表是“作业”对象的列表。此对象没有显示响应是否已收到的字段。有什么方法可以从外部而不是从 getView() 控制进度条的可见性?
-
而且,我不希望刷新整个列表,尽管只触及了一项。
-
不用担心整个列表会被刷新,只有可见元素会刷新,双缓冲确保你看不到它。无论如何,您无法对 listview 处理其视图的方式进行任何形式的控制。您需要为适配器提供一些数据以使其更改视图。将这些数据放入工作中是最明智的方式,恕我直言
-
stackoverflow.com/a/2679284/1405008 参考这个更简洁的解决方案,仅在 UI 显示在屏幕上时更新它。
标签: android listview android-listview baseadapter