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

커스텀 어레이어댑터 체크박스 연동문제

0 추천
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;
        }
    }

제가 설정한 커스텀어레이어댑터 입니다. 그리고 체크박스를 시도해보았는데

(리스트뷰와 체크박스 연동함)

리스트뷰를 아무리 클릭해도 체크박스에 체크가 되질 않네요... 이 왕초보좀 도와주세요 ㅠㅠ

그리고 전체선택은 어떤식으로 해결해야할까요 조언좀 ... ㅠㅠ

 

프밍왕초보 (360 포인트) 님이 2016년 6월 5일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...