2 guandongzhi guandongzhi 于 2014.10.08 09:32 提问

在listview中,在点击某行按钮后,按钮变灰。其它的行的按钮也变灰了。

在listview中,每行显示一个图片、一个按钮及说明文字,在点击某行按钮后,按钮变灰。但是发现点击某行的按钮后,在滑动界面时,发现其它的行的按钮也变灰了。请问这是什么问题?

下面是listview中getView方法代码:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
// TODO:点击按钮时,会操作多个按钮问题
if (convertView == null) {
convertView = inflater.inflate(R.layout.download_listview_oneline, null);
holder = new ViewHolder();

        // TODO:网络上获取图片
        holder.img = (ImageView)convertView.findViewById(R.id.imageViewId);
        holder.textViewId1 = (TextView)convertView.findViewById(R.id.textViewId1);
        holder.button1 = (Button)convertView.findViewById(R.id.button1);


        // 不按比例缩放图片,目标是把图片塞满整个View
        holder.img.setScaleType(ImageView.ScaleType.FIT_XY);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder)convertView.getTag();
    }

    try {
        Integer value = R.drawable.class.getDeclaredField(images[position].substring(0, images[position].indexOf("."))).getInt(null);
        holder.img.setImageResource(value);
    } catch (Exception e) {
        e.printStackTrace();
    }

    holder.textViewId1.setText(dess[position]);
    holder.button1.setOnClickListener(new View.OnClickListener()
    {

        @Override
        public void onClick(View view)
        {
            // TODO

// view.setEnabled(false);
if(view.getId() == R.id.button1)
{
Button b = (Button)view;
// 点击后该按钮变灰,不能再点
b.setEnabled(false);
dao.updateLastClickTime(2, _ids[position]);
String url = urls[position];
String filename = url.substring(url.lastIndexOf("/") + 1);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
checkFile(DIR, filename);
request.setDestinationInExternalPublicDir(DIR, filename);
long downloadId = downloadManager.enqueue(request);
//保存id
downloads.put(downloadId, _ids[position]);
}

        }
    });
    return convertView;
}
// 标记tag
public final class ViewHolder {   
    public ImageView img;
    public TextView textViewId1;
    public Button button1;
}

1个回答

qq787068730
qq787068730   2014.10.13 11:55

holder.button1.setOnClickListener里的判断“if(view.getId() == R.id.button1){Button b = (Button)view; // 点击后该按钮变灰,不能再点 b.setEnabled(false);... ...}”不能这样写。首先,getView()是ListView每增加一个item的内容时执行一次。而,你刚才那个判断的意思是,只要你点了随便哪一个button1,所有button1状态全部改变。因此,虽然有些暂时没变(是因为getView()已经被调用),只要你上下滑动一下ListView,getView()方法重新被执行,button1状态就都变了。

Csdn user default icon
上传中...
上传图片
插入图片