private class CustomListViewAdapter extends ArrayAdapter<SampleData> {
//ArrayAdapter 클래스를 상속하여 어레이리스트 데이터를 받아와 이를 리스트뷰에 표시함
//어레이어댑터 클래스가 하나의 텍스트뷰를 제공하는 것과 달리 지금 어댑터뷰는 SampleData의 객체에 맞게끔 구현
private ArrayList<Integer>listItem; //체크된 아이템을 저장할 list
int resource; //itemdata에 대한 리소스 아이디
public CustomListViewAdapter(Context context, int resource, List<SampleData> objects) {
super(context, resource, objects);
this.resource = resource; //파라미터로 전달되는 리소스 아이디를 멤버변수에 연결
}
//일단, CustomListViewAdapter 클래스 내부에 우리가 리스트에 표시할 항목을 저장할 리스트객체 (ArrayList items)
// 이는 CustomListViewAdapter 생성자를 통해 넘어온 리스트객체의 데이터를 저장하는 역할을 합니다. 생성자 내부에서는 생성자의
// 인자로 넘어온 리스트 객체(ArrayList items)를 CustomListViewAdapter 내부의 리스트 객체 (this.resource)로 연결시켜주는 모습
@Override
public View getView(int position, View converView, ViewGroup parent) {
//getView()메소드는 CustomListViewAdapter 클래스의 핵심 우리가 원하는 기능
// ex(리스트 항목에 두 줄의 텍스트가 표시되도록..) 을 이곳에서 구현함.
View itemView = converView;
if (itemView == null) {
//화면의 구성 단위인 View에 우리가 원하는 레이아웃을 적용시켜주기 위해 LayoutInflater를 사용
// LayoutInflater에 시스템 서비스를 받아온 후, inflate()메소드를 통해 레이아웃을 적용시켜주면 됨.
LayoutInflater li = getLayoutInflater();
itemView = li.inflate(this.resource, null);
}
final SampleData item = getItem(position);
//이 부분부터는 실질적으로 SampleData 객체 내의 데이터를 화면에 표시해주는 역할을 해주고 있습니다.
//아까 SampleData객체를 저장하고 있는 ArrayList를 CustomListViewAdapter 내의 리스트에 저장했는데, 이 List로부터
// 리스트의 해당 인덱스의 데이터를 받아오게 됩니다. 그리고, 이 데이터가 null(데이터 없음) 이 아니라면,
// 우리가 지금까지 해왔던 방법과 똑같이 findViewById()메소드를 통해 레이아웃 객체를 참조하여 데이터를 화면에 표시해주게 됩니다.
//데이터와 레이아웃을 연결해주는 작업이 끝나면, 최종적으로 작업이 완료된 View를 반환하여 화면에 표시하도록 합니다.
if (item != null) {
//객체가 존재한다면? itemview(itemdata.xml)에 배치된 컴포넌트를 객체화 해서 내용출력
TextView textView = (TextView) itemView.findViewById(R.id.main_tv);
TextView textView2 = (TextView) itemView.findViewById(R.id.sub_tv);
CheckBox checkBox = (CheckBox)itemView.findViewById(R.id.checkbox1);
textView.setText(item.getMainText());
checkBox.setChecked(((ListView)parent).isItemChecked(position));
checkBox.setFocusable(false);
checkBox.setClickable(false);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
item.setCheck(isChecked); //javabeans(viewitem.java)에게 복사된 값 넘김
}
});
checkBox.setChecked(item.isCheck()); //복사한 값을 컴포넌트에게 강제로 할당
}
return itemView;
}
}
제가 설정한 커스텀어레이어댑터 입니다. 그리고 체크박스를 시도해보았는데
(리스트뷰와 체크박스 연동함) 아무리 클릭해도 체크박스에 체크가 되질 않네요... 이 왕초보좀 도와주세요 ㅠㅠ
그리고 전체선택은 어떤식으로 해야할까요 조언좀...ㅠㅠ