마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

view holder 사용방법 질문드립니다.

0 추천
private class ViewHolder {
			
			
			TextView dayofweek;
			TextView onTimeset;
			TextView hour;
			TextView minute;

			CheckBox selected;
			
		}
		
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {

			ViewHolder holder = null;

			Log.v("ConvertView", String.valueOf(position));
			
			myNum =String.valueOf(position);
			

			if (convertView == null) {

				LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

				convertView = vi.inflate(R.layout.alaramlist_cell, null);

				holder = new ViewHolder();

				holder.dayofweek 	 = (TextView) convertView.findViewById(R.id.dayofweek);
				holder.onTimeset	 = (TextView) convertView.findViewById(R.id.onTimeset);
				holder.hour 	     = (TextView) convertView.findViewById(R.id.hour);
				holder.minute 		 = (TextView) convertView.findViewById(R.id.minute);
			
				
				holder.selected = (CheckBox) convertView
						.findViewById(R.id.checkBox1);

				convertView.setTag(holder);
				
	
			} else {
				holder = (ViewHolder) convertView.getTag();
			}

			AlaramDto alaramDto = alaramList.get(position);

			
			
			int num = Integer.parseInt(alaramDto.getDayofweek());
			int hour = Integer.parseInt(alaramDto.getHour());
			int min = Integer.parseInt(alaramDto.getMinute());
			
			holder.dayofweek.setText(dayOfWeekString[num]);
			
			holder.onTimeset.setText(alaramDto.getOnTimeset());
			holder.hour.setText(pad(hour));
			holder.minute.setText(pad(min));
			holder.selected.setChecked(Boolean.valueOf(alaramDto.getSelected()));
	

			holder.selected.setOnClickListener(new View.OnClickListener() {
				
				public void onClick(View v) {
					
					
					String toPass = (String) v.getTag();
					
					CheckBox cb = (CheckBox) v;
					

					Toast.makeText(getApplicationContext(),"체크박스 번호는? : "+ cb.getTag() , Toast.LENGTH_LONG).show();
					
				}
			});


			return convertView;
		}

		
	}	

 

 

안녕하세요 위에와 같이 사용중입니다.

리스트뷰에 체크박스를 구현하였습니다.

전체터치를 했을때는 설정페이지로 넘어가고 체크박스를 클릭했을때는 상태값을 바꿔서 디비에 저장시켜야합니다.

위에 있는 방법으로 구현하면 태그값이 NULL로 나옵니다. 

몇번째 체크박스를 체크했는지 찾고 거기에 대한 상태값을 저장해야하는대

null로 나와서 몇번째 체크박스를 선택햇는지 알수 없어서 질문드립니다!!

도움 부탁드리겠습니다.

아이튠즈 (230 포인트) 님이 2014년 4월 22일 질문
아이튠즈님이 2014년 4월 22일 수정

1개의 답변

+2 추천
CheckBox에 setTag를 하는 부분이 없어서 Tag를 가져올 수 없습니다. (NullPoint)

그러므로 AlaramDto에 체크값이 변환될때마다 값을 바꿔주는 역할을 하는 코드를 넣으셔야 합니다.

CheckBox에는 Check가 변환될 때 변환되는 값을 가져올 수 있는 Listener가 존재합니다.
dev_아마 (9,750 포인트) 님이 2014년 4월 22일 답변
우선 답변 감사드립니다!!

AlaramDto에 체크값이 변환될때마다 값을 바꿔주는 역할을 하는 코드를 넣으셔야 합니다.

이부분이 잘 이해가 안되는부분인대 자세하게 설명 부탁드립니다.ㅠㅠ

holder.selected.setTag(position); 이런식으로 태그설정을 해주면
오류가 나서 위에는 제거한상태입니다.
position이 태그값설정하는 값이 맞는지 잘 모르겠습니다. ㅠㅠ

그럼 답변 기다리겠습니다 감사합니다!
AlaramDto에 체크값이 저장되어있다는 가정하에 설명을 드리자면
holder.selected.setTag(position); 메소드를 통해 현재 View의 포지션값을 저장가능합니다.

CheckBox가 값이 바뀔 때마다 체인지 리스너를 달아놓고 리스너에는
Int position = (Integer)CheckBox.getTag();
AlaramDto.get(position).setCheckState(bool);
요런식으로 넣으셔야 합니다.
아 상세한 답변 감사드립니다.

답변 덕분에 모든것이 해결되었습니다.

고맙습니다!
...