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