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 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流