如何在listview android中刷新一行

时间:2013-06-19 11:09:31

标签: android android-layout android-listview

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码刷新listview行:

 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;
        }

答案 1 :(得分:-2)

用它来清洁适配器:

adapter.items.clear();