【发布时间】:2013-06-19 11:09:30
【问题描述】:
我有一个包含自定义控件的列表视图
我的自定义控件中有进度条,我想更改进度条的值。
int iRowCount = 0;
CMessage processMessage = null;
for (CMessage msg : m_msgList)
{
iRowCount ++;
if(msg._id == iMessageId)
{
processMessage = msg;
break;
}
}
if(processMessage == null)
return;
if(!processMessage.MessageType.equals(AttachType.Video.name()))
if(!processMessage.MessageType.equals(AttachType.Audio.name()))
return;
int rowPosition = iRowCount;
View v = lstMessage.getChildAt(rowPosition);
View updateView = lstMessage.getAdapter().getView(rowPosition - 1, v, lstMessage);
ILSpeechBubble sBubble = (ILSpeechBubble) updateView.findViewById(R.id.iLSpeechBubble1);
if(sBubble.getMessageId() == iMessageId)
{
iProgress = sBubble.getProgress();
if(iProgress == 100)
m_Downloading = false;
else
iProgress += 1;
sBubble.SetProgress(iProgress);
sBubble.postInvalidate();
updateView.postInvalidate();
}
使用此代码,我可以获得必须更改进度值的行
但我无法刷新 ui 中未更改的布局和进度
但是当我滚动列表视图时,进度值发生了变化。!
而且我不想使用 notifydatasetchanged()。
tnx 4 任何帮助
【问题讨论】:
-
你为什么不想使用
notifydatasetchanged? -
因为我不想刷新整个视图
-
与维护类似代码的复杂性相比,刷新整个视图的代价是什么? ;)
-
列表视图中有更多项目可能包含图片、文本、音频、视频。不需要更多的 CPU 使用率?
-
最后我使用 listview.invalidateViews(); !它类似于 notifyDatasetchanged()
标签: android android-layout android-listview