CheckBox位置错位的解决

来源:互联网 发布:淘宝客博客网站源码 编辑:程序博客网 时间:2024/05/17 10:38

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

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

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

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

viewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Overridepublic 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<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) {            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;    }}

阅读全文
0 0
原创粉丝点击