BaseAdapter를 사용해서 getView 메소드안에서
public View getView(final int position, View convertView, ViewGroup parent) { holder = null; DialogItem rowItem = (DialogItem)getItem(position); LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = mInflater.inflate(R.layout.dialog, null); holder = new ViewHolder(); holder.radioBtn = (RadioButton) convertView.findViewById(R.id.rb); holder.img = (ImageView) convertView.findViewById(R.id.img); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (position == 1 && userSelected == false) { mCurrentlyCheckedRB = holder.radioBtn; //holder.radioBtn.setChecked(true); mCurrentlyCheckedRB.setChecked(true); } else { holder.radioBtn.setChecked(false); } holder.radioBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mCurrentlyCheckedRB == null) { return; } if (mCurrentlyCheckedRB == v) return; mCurrentlyCheckedRB.setChecked(false); ((RadioButton) v).setChecked(true); mCurrentlyCheckedRB = (RadioButton) v; } }); holder.img.setImageResource(list.get(position).resID); return convertView; }
userSelected를 true로 지정하는 부분이 없네요.
그리고 userSelected를 true로 하더라도
holder.radioBtn.setChecked(false);
holder.radioBtn.setChecked(
false
);
위 구문을 타게되어 리스트 스크롤시 클릭된 라디어 버튼도 체크 해제되겠네요.
holder의 radio버튼과 mCurrentlyCheckedRB를 비교하는 구분도 있어야 되겠네요.