확인 항상
public View getView(int position, View convertView, ViewGroup parent){
View view = convertView;
ViewHolder holder = new ViewHolder();
if(view == null){
view = inflater.inflate(R.layout.list_callcycle_blue, null);
holder.llContainer = (LinearLayout) view.findViewById(R.id.ll_container);
holder.lblLabel = (TextView) view.findViewById(R.id.txt_desc);
holder.cb = (CheckBox) view.findViewById(R.id.cb_store);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
final Object data = getItem(position);
holder.lblLabel.setText(data.getDescription());
holder.cb.setTag(position);
holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int position = (Integer) buttonView.getTag();
objects.get(position).setChecked(buttonView.isChecked());
}
});
holder.cb.setChecked(isChecked(position));
return view;
}
명심, 이용 변화는 holder.cb.setOnCheckedChangeListener()
즉이 데이터를 설정되기 전에 어떤 청취자는, 우리의 경우는 holder.cb.setChecked()
이유입니다 : 때 우리 scroll, listview는 뷰를 재활용 할 것이므로, setchecked가 리스너보다 먼저 사용된다면 오래된 리스너를 기준으로 값을 선택할 것이다. 우리가 청취자 후를 설정한다면, 그것은 검색에 사용 isChecked()
및 setChecked()
방법은 마법처럼 데이터
/*
* This function is in your Custom Adapter Class
*/
private boolean isChecked(int position){
return object(position).isChecked();
}
/**
* Getter Setter Class/Data Model Class that defines your object
*/
private class MyObject{
private boolean isChecked;
private String a, b, c, orWhateverYourObjectNeeds;
public void setChecked(boolean isChecked){
this.isChecked = isChecked;
}
public boolean isChecked(){
return isChecked
}
}
우수한 작품을 확인하는 방법 부분 아래 가 표시됩니다 최신 값
EDITED PART 걸릴 것입니다! 나는 스크롤 할 때마다 getView 메소드가 실제로 호출된다는 것을 알지 못했다! 전체 목록이 초기화 된 다음 getView 메서드가 다시 호출되지 않는다고 생각했습니다! – mixkat
나는 이것을 고쳤다 고 생각했지만 틀렸다.그 이상한 이유는 setOnCheckedChangeListener에서 작동하기 위해서 다른 방법이 필요합니다. 즉, isChecked가 배열의 해당 필드를 false로 설정하고 그렇지 않으면 true로 설정해야합니다. 하지만 어떤 체크 박스가 체크되어 있는지 확인해야 할 때 모든것이 엉망이됩니다.주의 : 제대로 설정했다면, 박스가 체크되어 졌을 때 배열 필드를 true로 설정하면 스크롤을 내려서 다시 백업하면 모든 것이 손실됩니다. 모든 아이디어 왜 이런 일이 일어 났습니까? – mixkat
재활용 된 뷰에 대해서도'setChecked'를 호출하고 있습니까? 즉, if 문 밖에서 재활용되거나 재활용되지 않는 뷰를 채 웁니다. * /' –