這個(gè)是使用ViewHolder常見(jiàn)的問(wèn)題
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
info = list.get(i);
ViewHolder viewHolder;
if(view==null) {
viewHolder = new ViewHolder();
view = LayoutInflater.from(getContext()).inflate(itemId, null);
viewHolder.imageView = view.findViewById(R.id.app_icon);
viewHolder.textView = view.findViewById(R.id.app_packagename);
viewHolder.checkBox = view.findViewById(R.id.app_chechbox);
view.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) view.getTag();
}
if(checkingArray[i]==true){
viewHolder.checkBox.setChecked(true);
Log.d("click"+i+"", " set checkbox true");
}else{
viewHolder.checkBox.setChecked(false);
}
viewHolder.imageView.setImageDrawable(info.icon);
viewHolder.textView.setText(info.packageName);
final int a =i;
viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
Log.d("check"+a, "onCheckedChanged: ");
if (b) {
App.bannedApplicationList.add(info.packageName);
// info.ifChecked = true;
checkingArray[a] = true;
Log.d("click"+a, "set true");
}else{
// info.ifChecked = false;
// Log.d("listLength",App.bannedApplicationList.size()+"");
}
}
});
int length = checkingArray.length;
for(int k=0;k<length;k++){
if(checkingArray[k]==false){
}
}
return view;
}
只放出getView部分的代碼
首先需要記一下點(diǎn)擊checkbox時(shí)候的狀態(tài)鸿摇,這個(gè)狀態(tài)的可以在List的實(shí)體類中添加一個(gè)布爾變量記錄凑术,那么判斷這view的時(shí)候喜颁,如果true的話在set一下就可以。
但是經(jīng)過(guò)觀察:
在點(diǎn)擊前面四個(gè)checkboxbox時(shí)洽瞬,控制臺(tái)輸出
Log.d("check"+a, "onCheckedChanged: ");
沒(méi)有問(wèn)題嗡髓,但是在向下滑動(dòng)時(shí)候操漠,會(huì)錯(cuò)誤的認(rèn)為其他的item也被點(diǎn)擊。
這樣饿这,只需要換一個(gè)監(jiān)聽(tīng)器就行(我還把item也設(shè)置為false)
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
info = list.get(i);
ViewHolder viewHolder;
if(view==null) {
viewHolder = new ViewHolder();
view = LayoutInflater.from(getContext()).inflate(itemId, null);
viewHolder.imageView = view.findViewById(R.id.app_icon);
viewHolder.textView = view.findViewById(R.id.app_packagename);
viewHolder.checkBox = view.findViewById(R.id.app_chechbox);
view.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) view.getTag();
}
if(checkingArray[i]==true){
viewHolder.checkBox.setChecked(true);
Log.d("click"+i+"", " set checkbox true");
}else{
viewHolder.checkBox.setChecked(false);
}
viewHolder.imageView.setImageDrawable(info.icon);
viewHolder.textView.setText(info.packageName);
final int a =i;
viewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkingArray[a] = true;
Log.d("click"+a, "onClick: ");
}
});
return view;
}