안드로이드 개발 질문/답변
(글 수 45,052)
package com.androind;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
public class Checkbox_test extends ListActivity {data selectedItem;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<data> list = new ArrayList<data>();
for(int i = 0; i < 20; i++) { data mi = new data("test"+i,"test");list.add(mi);
}
customAdapter mAdapter = new customAdapter(this,R.layout.data_row, list);
setListAdapter(mAdapter);
}
class data {private String id;
private String subject;
public data(String _id, String _subject) {this.id = _id;
this.subject = _subject;
}
public String getId() {return id;
}
public String getSubject() {return subject;
}
}
private class customAdapter extends ArrayAdapter<data> {private ArrayList<data> listItem;
public customAdapter(Context context, int textViewResourceId, ArrayList<data> _listItem) {super(context, textViewResourceId, _listItem);
this.listItem = _listItem;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {View v = convertView;
if(v == null) {LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.data_row, null);
}
data mi = listItem.get(position);
if(mi != null) {CheckBox cb = (CheckBox) v.findViewById(R.id.checkBox1);
cb.setFocusable(false);
TextView tsubject = (TextView) v.findViewById(R.id.textView_subject);
tsubject.setText(mi.getSubject());
}
return v;
}
}
}
코드는 위와 같습니다. 불필요한 코드를 삭제하고 간단하게 작성했습니다.
검색을 통해서 알아낸 바로는 "Adapter에서 getView로는 현재 출력되는 리스트의 포지션 밖에 얻어올 수 없고 스크롤 시 포지션이 변경되므로 체크박스가 클릭될 때 해당 값을 ArrayList 형태로 저장하여 관리하는 방법이 있다." 입니다.
질문은 몇번째 체크박스가 클릭되는지 어떻게 알 수 있나요?
체크박스 리스너는 포지션 값을 전달받지 않는 것 같은데요...
ListView와 CheckBox를 연동하여 onListItemClick 메소드를 통하면 가능 할 것 같긴한데...
제가 구현하고 싶은 부분은 리스트와 체크박스를 각각 다르게 이벤트를 주고 싶다는 것 입니다.
리스트를 클릭하면 내용이 보여지고, 체크박스는 체크한 항목에 대해서 일괄 삭제 같은 처리를 하기 위함입니다.
답변 부탁드리겠습니다.




OnCheckedChangeListener를 getView 안에서 구현해보면 어떨까요? cb.setOnCheckedChangeListener(new OnChecked... 이런식으로요.