2

我有一个包含自定义控件的列表视图,
我的自定义控件中有进度条,我想更改进度条的值。

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 任何帮助

4

2 回答 2

2

您可以使用以下代码刷新列表视图行:

 ListView list = getListView();
    int start = list.getFirstVisiblePosition();
    for(int i=start, j=list.getLastVisiblePosition();i<=j;i++)
        if(target==list.getItemAtPosition(i)){
            View view = list.getChildAt(i-start);
            list.getAdapter().getView(i, view, list);
            break;
        }
于 2013-06-19T11:12:31.997 回答
-2

使用它来清洁适配器:

adapter.items.clear();
于 2014-03-24T21:28:56.303 回答