一个listview里 有个图片按钮的显示问题,播放完了 开始的图片按钮要显示出来 停止的图片按钮要消失。。这个时候 我拖动的话,图片就显示在错误的行了。。貌似是view holder的问题 有人帮个忙么listview

解决方案 »

  1.   

    我的listview里面,点击一行后,我显示一个imagebutton 这时候线程会执行一个任务,任务完成后会改变这个view的button状态,就这时候,我下拉后,button的状态显示到别的行里去了,应该是listview 缓存了 view的问题。。你有没有遇到过
      

  2.   

    你给button设一个标记,button.setflag("flag"),通过标记listview.findViewWithTag("tag")来刷新button的状态,holder本身可复用的,所以button状态会显示在其它item上面
      

  3.   


    谢谢,试了下,好用,反复测试的时候,还是有bug,不知道还有没有其他方法。。
      

  4.   

    item重用的问题,你把个getView()贴出来看看啊..
      

  5.   


    谢谢,试了下,好用,反复测试的时候,还是有bug,不知道还有没有其他方法。。应该是没问题的,检查一下代码吧,实在不行用这个
    final int firstVisiblePosition=listview.getFirstVisiblePosition();
    View convertView = listview.getChildAt(position - firstVisiblePosition);
    if(convertView  != null){
    Button bt = convertView .findViewVById(id);
    }
    通过这个来找到你要刷新的button
      

  6.   

    getView()方法处理的有问题   你复用convertView的时候请注意 position 这个变量
      

  7.   

    这个问题碰到过很多次,处理方法目前我用过2种:一种是在adapter中自己定义一个onItemClickListener,传递给外面activity调用。然后在这个点击事件中,进行对listview背景的切换,你这里是要对listview里面的button切换,你还得在adapter里面写get/set方法。第二种是,通过数据对listview里面的UI进行改变,这些UI的改变都是跟数据有关的,比如开始加载的时候button是按照数据里面的某个值显示,然后数据变了之后,button按照变了的值显示,这样的话写在adapter里面写一个setData方法。
    public void setData(List<Map<String, Object>> queryResultList){
    this.queryResultList = queryResultList;
    notifyDataSetChanged();
    }就可以了。这两种方法楼主可以看你自己的情况使用。