CheckBox位置错位的解决

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

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

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

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

viewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
	@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错位就是这么简单,只添加了这一个方法。如果哪位大神还有见解可以告诉小弟

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

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

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

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

package cn.uniwa.uniwa.adapter;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

import com.hexun.caidao.hangqing.dao.HxStockInfo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.uniwa.uniwa.R;
import cn.uniwa.uniwa.util.RecordSQLiteOpenHelper;

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

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

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

        public SearchAdapter(Context context, List liveShowData) {
            this.context = context;
            this.liveShowData = liveShowData;
            mInflater = LayoutInflater.from(context);
            this.helper = new RecordSQLiteOpenHelper(context);

        }

        @Override
        public int getCount() {
        return liveShowData.size();
    }

    @Override
    public Object getItem(int i) {
        return liveShowData.get(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 = mInflater.inflate(R.layout.hot_search_item_layout, null, false);
            viewHolder = new ViewHolder();
            viewHolder.name = (TextView) convertView.findViewById(R.id.hot_search_name);
            viewHolder.id = (TextView) convertView.findViewById(R.id.hot_search_id);
            viewHolder.cb = (CheckBox) convertView.findViewById(R.id.hot_search_cb);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.name.setText(liveShowData.get(i).getName());
        viewHolder.id.setText(liveShowData.get(i).getCode());
       
        viewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked==true){
                    map.put(i,true);
                   
                }else {
                    map.remove(i);
//               
                }
            }
        });

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

你可能感兴趣的:(Android,CheckBox位置错位,CheckBox错位,CheckBox串位置,CheckBox位置)