guandongzhi 2014-10-08 01:32 采纳率: 0%
浏览 2789

在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条回答

  • 大虫子猪NO1 2014-10-13 03: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状态就都变了。

    评论

报告相同问题?

悬赏问题

  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器