나는 텍스트와 체크 박스가있는 listview가 있습니다. 목록보기를 스크롤하는 동안 확인란이 이상하게 작동합니다. 그것은 재활용 문제로 보인다. 어쨌든 나는 몇몇 유사한 포스트에서 제안 된 각종 선택권을 시도하고 그러나 저를 위해 일해 그 (것)들의 아무도를 시도하지 않았다. 나는 세트 중 하나를 시도했지만 힘든 행운을 제안했다 태그 위치를 얻을. 내 활동 파일에서 사용자 지정 어댑터를 사용하여 목록보기를 사용 중입니다. 다음은 일부 코드 단편입니다. 활동 클래스 :ListView 스크롤의 체크 박스 문제
lv = (ListView) findViewById(R.id.itemdisplay_listview);
lv.setAdapter(new CustomAdapter(this, itemNames, tableNo));
사용자 정의 어댑터 : 나는 꽤 오랜 시간 동안 고전을 면치 못하고있다
private class CustomAdapter extends BaseAdapter {
private List<String> mListItems;
private LayoutInflater mLayoutInflater;
ViewHolder holder;
int a = 1;
public CustomAdapter(Context context, List<String> arrayList,
String table) {
tableNumber = table;
mListItems = arrayList;
// get the layout inflater
mLayoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mListItems.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
private class ViewHolder {
TextView itemName, quantity;
CheckBox checkbox;
ImageButton addBtn, minusBtn;
}
@Override
public View getView(int position, View convertview, ViewGroup viewGroup) {
// create a ViewHolder reference
// check to see if the reused view is null or not, if is not null
// then
// reuse it
if (convertview == null) {
holder = new ViewHolder();
convertview = mLayoutInflater.inflate(
R.layout.itemdisplay_list, null);
holder.itemName = (TextView) convertview
.findViewById(R.id.itemdisplaylist_name);
holder.addBtn = (ImageButton) convertview
.findViewById(R.id.itemdisplaylist_add);
holder.minusBtn = (ImageButton) convertview
.findViewById(R.id.itemdisplaylist_minus);
holder.quantity = (TextView) convertview
.findViewById(R.id.itemdisplaylist_quantity);
holder.checkbox = (CheckBox) convertview
.findViewById(R.id.itemdisplaylist_cbox);
// holder.checkbox.setTag(position);
// the setTag is used to store the data within this view
convertview.setTag(holder);
} else {
// the getTag returns the viewHolder object set as a tag to the
// view
holder = (ViewHolder) convertview.getTag();
}
holder.checkbox.setOnClickListener(checkListener);
doneBtn.setEnabled(true);
holder.minusBtn.setImageResource(R.drawable.minus);
holder.quantity.setText(String.valueOf(a));
holder.addBtn.setImageResource(R.drawable.add);
holder.addBtn.setOnClickListener(addBtnClick);
holder.minusBtn.setOnClickListener(minusBtnClick);
String stringItem = mListItems.get(position);
if (stringItem != null) {
if (holder.itemName != null) {
// set the item name on the TextView
holder.itemName.setText(stringItem);
}
}
// this method must return the view corresponding to the data at the
// specified position.
return convertview;
}
private OnClickListener checkListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
/*doneBtn.setOnClickListener(doneBtnClick);*/
View view = (View) v.getParent();
CheckBox cb = (CheckBox) view
.findViewById(R.id.itemdisplaylist_cbox);
TextView tv = (TextView) view
.findViewById(R.id.itemdisplaylist_name);
TextView tv1 = (TextView) view
.findViewById(R.id.itemdisplaylist_quantity);
if (cb.isChecked()) {
map.put(tv.getText().toString(), tv1.getText().toString());
} else {
for (Iterator<Map.Entry<String, String>> it = map
.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, String> entry = it.next();
String item = entry.getKey();
if ((tv.getText().toString()).equals(item)) {
it.remove();
}
}
}
}
};
. 제발 조언. 감사.
내 대답을 확인해보십시오. – Harshid