在listview的adapter错位的问题

Zunefans 2016-08-15 06:30:57
在listview的自定义adapter类里的getview里,设置button的onclicklistener,点击时更换该button的背景,怎么做到不让它错位?
...全文
468 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
怀君 2016-08-17
  • 打赏
  • 举报
回复
你想实现一个什么样的效果。可以把图贴出来吗
czepeng 2016-08-17
  • 打赏
  • 举报
回复
public void onClick(View v) { if(state == 1){ viewHolder.btn.setBackgroundColor(Color.MAGENTA); state = 0; }else{ viewHolder.btn.setBackgroundColor(Color.CYAN); state = 1; } } 这里state =0 修改的不是当前object的值
lucers 2016-08-17
  • 打赏
  • 举报
回复
那就做一个记录吧,声明一个记录当前位置的变量currentPosition,点击的时候 cureentPosition = position; 然后变颜色的时候做一个判断, currentPosition == position;时才改变当前位置Button的颜色,如果你需要多个Button点击改变颜色就将被点击的位置记录做成一个集合
wjflcjy 2016-08-17
  • 打赏
  • 举报
回复
这个简单呀 你有一个集合 这个集合有每个item的数据 你加一个字段 这个字段是背景的参数 这样动态滑动的时候在getview里面 根据这个集合 来设置 对应的背景就不乱了
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 9 楼 qq_25412055 的回复:
[quote=引用 4楼我是你的主体 的回复:][quote=引用 1 楼 qq_25412055 的回复:] 额。。什么叫错位啊,如果是点击背景变暗这种效果的话,只需要给button加一个background就行
我知道,我的错位指的是我点击第一行的button想让他改变第一行的button的背景,但是它却可能去改变其他行的button的背景[/quote]你这个肯定是代码逻辑有错误啊[/quote]

public View getView(final int position, View convertView, ViewGroup parent) {
        if(convertView == null){
            viewHolder = new ViewHolder();

            convertView = layoutInflater.inflate(R.layout.list_item,null);
            viewHolder.tv = (TextView) convertView.findViewById(R.id.tv);
            viewHolder.btn = (Button) convertView.findViewById(R.id.btn);

            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.tv.setText(data.get(position).get("name"));
        int state = Integer.parseInt(data.get(position).get("state"));
        if(state == 1){
            viewHolder.btn.setBackgroundColor(Color.CYAN);
        }else{
            viewHolder.btn.setBackgroundColor(Color.MAGENTA);
        }
        viewHolder.importance.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(state == 1){
                   viewHolder.btn.setBackgroundColor(Color.MAGENTA);
                   state = 0;
                }else{
                   viewHolder.btn.setBackgroundColor(Color.CYAN);
                   state = 1;
                }
            }
        });

        return convertView;
    }
大致代码是这样的,有什么错误吗?
LoveWyf_ 2016-08-16
  • 打赏
  • 举报
回复
引用 4楼我是你的主体 的回复:
[quote=引用 1 楼 qq_25412055 的回复:] 额。。什么叫错位啊,如果是点击背景变暗这种效果的话,只需要给button加一个background就行
我知道,我的错位指的是我点击第一行的button想让他改变第一行的button的背景,但是它却可能去改变其他行的button的背景[/quote]你这个肯定是代码逻辑有错误啊
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 6 楼 u012963788 的回复:
记住所有按钮的状态.
能否将讲具体怎么实现?
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 3 楼 moonFY 的回复:
setTag 添加一个Tag 根据Tag来改变Button的background
能否具体讲讲怎么实现?谢谢了
寄莫相伴 2016-08-16
  • 打赏
  • 举报
回复
记住所有按钮的状态.
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 2 楼 qq_35619786 的回复:
不知楼主说的错位是什么样的???
我的错位指的是我点击第一行的button想让他改变第一行的button的背景,但是它却可能去改变其他行的button的背景
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 1 楼 qq_25412055 的回复:
额。。什么叫错位啊,如果是点击背景变暗这种效果的话,只需要给button加一个background就行
我知道,我的错位指的是我点击第一行的button想让他改变第一行的button的背景,但是它却可能去改变其他行的button的背景
moonFY 2016-08-16
  • 打赏
  • 举报
回复
setTag 添加一个Tag 根据Tag来改变Button的background
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 20 楼 Yangyang___ 的回复:
viewHold 复用 问题,可以看这篇博文,讲的很透侧了。http://blog.csdn.net/huanongjingchao/article/details/42918869
按照文章的第三种情况改了,没有效果啊……
  • 打赏
  • 举报
回复
viewHold 复用 问题,可以看这篇博文,讲的很透侧了。http://blog.csdn.net/huanongjingchao/article/details/42918869
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 17 楼 qq_35619786 的回复:
你是不是点击一行的button,往下滑动,发现有其他行的button的颜色变化了?由于convert复用的原因,你改变某行的颜色,复用时,convertView将被改变的状态也复用了, 就比如说这样的: 你好啊! view1 我好啊! view2 他好啊! view3 你再往下显示就变成 我好啊! view2 他好啊! view3 都好啊! view1,这个由于convertView的复用效果,会使用View1的对象 你如果改变了你好啊的颜色状态,都好啊的颜色状态也会改变
是这个问题,那么怎么解决呢?
LoveWyf_ 2016-08-16
  • 打赏
  • 举报
回复
就是不用viewholder啊,复用的时候可能产生问题
lucers 2016-08-16
  • 打赏
  • 举报
回复
你是不是点击一行的button,往下滑动,发现有其他行的button的颜色变化了?由于convert复用的原因,你改变某行的颜色,复用时,convertView将被改变的状态也复用了, 就比如说这样的: 你好啊! view1 我好啊! view2 他好啊! view3 你再往下显示就变成 我好啊! view2 他好啊! view3 都好啊! view1,这个由于convertView的复用效果,会使用View1的对象 你如果改变了你好啊的颜色状态,都好啊的颜色状态也会改变
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 15 楼 qq_35619786 的回复:
楼主应该是由于convertView的复用导致点第一行导致复用的位置颜色也改变了??
什么意思?
lucers 2016-08-16
  • 打赏
  • 举报
回复
楼主应该是由于convertView的复用导致点第一行导致复用的位置颜色也改变了??
Zunefans 2016-08-16
  • 打赏
  • 举报
回复
引用 13 楼 qq_25412055 的回复:
你每次点击后改变state 的值,不是应该去改变data中“state”的值嘛。还是不行,你就去把viewholder去了试试
viewholder去了是什么意思?
加载更多回复(5)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧