上面图片中展示的是通过ListView加载一些下载列表,现在遇到一个问题:当点击5035
这条数据下载时,把列表滚到第二页相应位置的2794113
这条数据也会跟着改变,后面每一页的对应位置的数据都会这样,请问该怎么解决?
代码如下:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if(convertView == null){
viewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.activity_down_site_item, null);
viewHolder.siteText = (TextView) convertView.findViewById(R.id.site_name);
viewHolder.siteBar = (ProgressBar) convertView.findViewById(R.id.site_bar);
viewHolder.siteDownload = (Button) convertView.findViewById(R.id.site_download);
viewHolder.siteDelete = (Button) convertView.findViewById(R.id.site_delete);
viewHolder.siteUpdate = (Button) convertView.findViewById(R.id.site_update);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
//从集合中获取数据
JSONObject jsonObject = (JSONObject) mJsonArray.get(position);
final ViewHolder currentViewHolder = viewHolder;
viewHolder.siteText.setText(jsonObject.get("ID").toString());
viewHolder.siteDownload.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
currentViewHolder.siteDownload.setText("等待中");
currentViewHolder.siteDownload.setClickable(false);
currentViewHolder.siteBar.setVisibility(View.VISIBLE);
//TODO 下载逻辑
}
});
if(isDone==1){
//隐藏删除、更新按钮
viewHolder.siteDownload.setVisibility(View.VISIBLE);
viewHolder.siteDelete.setVisibility(View.GONE);
viewHolder.siteUpdate.setVisibility(View.GONE);
}else{
//隐藏下载按钮
viewHolder.siteDownload.setVisibility(View.GONE);
viewHolder.siteDelete.setVisibility(View.VISIBLE);
viewHolder.siteUpdate.setVisibility(View.VISIBLE);
}
return convertView;
}
Reuse issues
viewHolder.siteDownload.setOnClickListener(new OnClickListener() {
Analysis of the cause of the error:
After clicking, set the text to "Waiting"
Reuse the siteDownload text of the previous convertView and the visibility of the siteBar when sliding.
In addition, isDone is a member variable, and it is easy to cause problems here
Recommended data set implementation method
Sample Bean:
int status; // Three statuses: download not started, downloading, download completed
int progress; // Progress
String downloadID ; // Download ID
...etc.
Set the corresponding control display according to status. The pseudo code is as follows:
If you still have any questions, please ask