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 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示