关于CheckBox位置错位也挺烦人的,今天也是摆弄了一上午,废话不多说。
CheckBox位置错乱主要是convertView点击时复用了,所以可以将CheckBox点击使用Map进行存储,点击则添加,再点击则删除。
private Mapmap=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
之前添加的文件后来发现可能会出现自动点击了,后来查了一下找到了这个方法
这个方法则是如果不是用户点击的就会返回,如果是则会走else,设定方法if (!buttonView.isPressed()) { return; } 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;
}
}