안녕하세요?
DB에서 Cursor로 데이터 가져와서 ListView에 뿌려주는건 성공했어요.
그리고 MultiChoice 하는것도 성공했구, item Click 했을 때 그게 몇 번째 item인지 알아 내는 것도 성공했어요.
그런데 아직 완성하지 못한 부분 질문 드리고 싶어요.
1. ListView를 Scroll 안에 넣기 & 그 밑에 항상 Button 나타나게 하기
(이거 하려면 Layout xml을 만들어야 할 것 같은데.. ListActivity 를 써서 Layout XML을 어떻게 이용해야 할지 모르겠어요.)
2. MultiChoice 관련 질문
- Table의 특정 field에 T로 돼 있으면 Multichoice 나타낼 때 Checked로 나타나게 하기
- 밑에 Button을 누르면 Checked 된 데이터 position만 골라내기
- item을 길게 누르는 event를 handling 하기
이런 부분이 막히네요. 전체 소스 첨부합니다.
조언 부탁드립니다.
감사합니다.
public class RuleListView extends ListActivity implements Constants {
public DBMethods DBM;
Cursor cursor;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// DB 사용할 수 있도록 함
DBM = new DBMethods(getBaseContext());
setupListView();
}
/////// ListView Setting DB 에서 가져온 것을 ArrayList 에 넣기? 아니면 Cursor 로 처리하기
private void setupListView()
{
//// 모든 데이터를 가져옴
cursor = DBM.getAllData();
///// List View 셋업하고 각종 기능 넣음 ListAdapter 와 SimpleCursorAdapter 를 씀
//// 특정 field 값이 true 이면 checked로 나타나게 하기 ????????
ListAdapter adapter = new SimpleCursorAdapter(
this,android.R.layout.simple_list_item_multiple_choice,cursor,new String[]{CONTENT},
new int[]{android.R.id.text1});
ListView lv = getListView();
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setAdapter(adapter);
//// lv. 으로 해서 선택 한 애들만 얻어오는 방법 ??????
//// ListView 를 Scroll 안에 넣어서 밑에 버튼 만들어 넣을 수 있도록 하기 ??????
//// 버튼 누르면 checked 된 애들만 DB로 보내 update 하기 ??????
}
protected void onListItemClick (ListView l, View v, int position, long id) {
String test = Integer.toString(position);
Toast.makeText(RuleListView.this, test + " SELECTED", Toast.LENGTH_SHORT).show();
};
}




제가 하는 거랑 비슷하네요..
일단 전 Activity 구현할때 ListActivity를 implements를 하진 않았습니다. 만약 전체 화면을 ListView 형태로 보여주는 것이라면 이게 좋지만 저같은 경우는 Activity의 상단을 검색 UI형태, 하단을 검색 결과를 보여주는 ListView 형태이기 때문에 맞지 않더라구요..
그리고 저도 첨엔 SimpleCursorAdapter를 써서 구현하는 식으로 했지만 이럴 경우 ListView에 나타나는 각 줄에 보여지는 View들의 제어를 할 수 없었습니다(물론 하는 방법이 있을 수도 있겠지만 제가 접했던 샘플소스는 단순히 DB에서 조회된 내용을 각 View에 매핑해서 보여주는 소스위주로 되어 있어서..ㅠㅠ..)
그래서 DB에서 조회된 결과를 ArrayList에 넣은뒤 이를 BaseAdapter를 상속받은 별도 Adapter를 만들어서 ListView에 셋팅하도록 했습니다. 이렇게 하면 ListView의 각 행을 표현해주는 View들을 하나씩 꺼집어 내어 걔들의 이벤트 제어들이 가능합니다.
정리하자면..별도 Adapter를 만드셔서 작업을 하시길 권장합니다. 제가 거기까지는 해보지 않았지만 DB에서 조회된 결과 Cursor를 Adapter에서 사용하시겠다면 CursorAdapter를 상속받은 별도 Adapter를 통해서 구현할수도 있지 않을까 싶습니다..요즘 이 부분을 하면서 정말 생각을 넓혀야겠다는 생각이 많이 들더군요..ㅎㅎ..