ImageButton
当我在ListView
.
解决方案是更新各个行而不是调用adapter.notifyDataSetChanged()
(据我所知,它会干扰您的点击/触摸侦听器)。所以要做到这一点,我的问题是准确地找到行。为此,我需要两件事:
- 将URL 字符串
Transfer
映射到我的对象( mPathToTransfers
),
- URL 列表(
mPathKeys
)。
这是我的适配器的一些代码:
protected LinkedHashMap<String, BaseTransfer> mPathToTransfers;
protected List<String> mPathKeys;
@Override
public int getCount() {
mPathKeys = new ArrayList<String>(mPathToTransfers.keySet());
return mPathToTransfers.size();
}
@Override
public BaseTransfer getItem(int position) {
return mPathToTransfers.get(mPathKeys.get(position));
}
/**
* Update transfer (download) progress in ListView's specific row
*/
public void setItemTransferredSize(String path, long transferredSize, ListView lv) {
if (mPathToTransfers.containsKey(path)) {
BaseTransfer dItem = (BaseTransfer) mPathToTransfers.get(path);
dItem.setTransferredSize(transferredSize);
Holder holder = getViewHolderForTransfer(path, lv);
if (holder != null)
setTransferProgressUpdate(holder, dItem);
}
}
/**
* Use to get the View Holder of the row of the transfer
*
* @param path
* @param lv
* @return {@linkplain Holder} for row, if it is visible, null otherwise
*/
private Holder getViewHolderForTransfer(String path, ListView lv) {
int rowIndex = mPathKeys.indexOf(path);
if (lv.getFirstVisiblePosition() <= rowIndex && lv.getLastVisiblePosition() >= rowIndex)
return (Holder) lv.getChildAt(rowIndex - lv.getFirstVisiblePosition()).getTag();
else
return null;
}
如果您有歧义,请在下面的评论中提问(或在您的问题评论中)。:)