CheckBox位置错位的解决

时间:2025-04-02 16:36:49

关于CheckBox位置错位也挺烦人的,今天也是摆弄了一上午,废话不多说。

CheckBox位置错乱主要是convertView点击时复用了,所以可以将CheckBox点击使用Map进行存储,点击则添加,再点击则删除。

private Map<Integer,Boolean> map=new HashMap<>();// 存放已被选中的CheckBox

首先先写一个Map,用来存储被选中的CheckBox

viewHolder.cb.setOnCheckedChangeListener(new () {
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		if(isChecked==true){
		    map.put(i,true);//i就是你自己getView方法内的int i,有的人可能是postion。
		}else {
		    map.remove(i);
}
}

}

如果你使用了setOnClickListener大可以将之替换为setOnCheckedChangeListener,至于会出现什么问题,在本人使用过以后没有遇见,如果后期遇到我会再继续添加

个人修改checkbox错位就是这么简单,只添加了这一个方法。如果哪位大神还有见解可以告诉小弟

个人也是看过之后解决自己问题后写了一个简便的,更多详解请看:/qq_20521573/article/details/52655570

之前添加的文件后来发现可能会出现自动点击了,后来查了一下找到了这个方法

if (!()) {
    return;
} else {
}
这个方法则是如果不是用户点击的就会返回,如果是则会走else,设定方法

附上我的adapter的类:(这是我的项目已经删除了隐私部分,没有跑过,所以如果有问题可以私聊我)

package ;

import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;

import ;

import ;
import ;
import ;

import ;
import ;

    /**
     * Created by Administrator on 2017/11/8.
     */

    public class SearchAdapter extends BaseAdapter {
        private Context context;
        private List<HxStockInfo> liveShowData;
        LayoutInflater mInflater;
        private SQLiteDatabase db;
        private RecordSQLiteOpenHelper helper;

        private Map<Integer,Boolean> map=new HashMap<>();// 存放已被选中的CheckBox

        public SearchAdapter(Context context, List<HxStockInfo> liveShowData) {
             = context;
             = liveShowData;
            mInflater = (context);
             = new RecordSQLiteOpenHelper(context);

        }

        @Override
        public int getCount() {
        return ();
    }

    @Override
    public Object getItem(int i) {
        return (i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View convertView, ViewGroup viewGroup) {
        ViewHolder viewHolder = null;
        if (convertView == null) {
            convertView = (.hot_search_item_layout, null, false);
            viewHolder = new ViewHolder();
             = (TextView) (.hot_search_name);
             = (TextView) (.hot_search_id);
             = (CheckBox) (.hot_search_cb);

            (viewHolder);
        } else {
            viewHolder = (ViewHolder) ();
        }
        ((i).getName());
        ((i).getCode());
       
        (new () {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked==true){
                    (i,true);
                   
                }else {
                    (i);
//               
                }
            }
        });

        return convertView;
    }
    public class ViewHolder {
        TextView name;
        TextView id;
        public CheckBox cb;
    }
}