안녕하세요!
오늘도 수고가 정말 많으십니다 ㅠㅜ
다름이 아니라 제가 커스텀listview를 만들고 getview에서 해당 포지션에 checkbox를 넣어서
만들어지 Activity에서
화면 띄웠을때 체크박스를 클릭해서 선택하면
밑에 [확인]버튼 를 클릭시 체크된 해당 포지션의 정보들을 DB안에 넣을려고 하는데요.
다했는데 버튼안에 onclick안에 소스를 어떻게 넣을지 고민하다가 막혀서 이렇게 글을 올립니다 ㅠㅜ
일단 소스 입니다
//테마 관리 해당 장르 체크 창
public class SetThemeManageListActivity extends Activity {
Context mContext;
LayoutInflater inflater;
View reView;
View reViewTitle;
ArrayList<ListItem> arItem;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.set_thememanage_list);
// 레이아웃을 선언하기 위해서 필요한 소스 선언합니다.
mContext = getApplicationContext();
inflater = (LayoutInflater) mContext
.getSystemService(LAYOUT_INFLATER_SERVICE);
Button btnOk = (Button)findViewById(R.id.set_thememanage_list_btn_ok);
// 디비 선언
DBHelper testHelper = new DBHelper(this);
SQLiteDatabase db = testHelper.getWritableDatabase();
Cursor cursor;
// cursor선언해서 한 행에 찾는거 자신의 디비 찾는거 모든 정보를 가져온다.
cursor = db.rawQuery("SELECT * FROM db_thememanager", null);
startManagingCursor(cursor);
// 데이터를 넣는 아이템 리스트입니다.
arItem = new ArrayList<ListItem>();
// 커서 안에 넣은 해당 디비의 정보값들을 하나씩 넣는다.
while (cursor.moveToNext()) { // 다음 한칸? 컬럼??
String cmtitle = cursor.getString(0); // cursor.getString(해당 컬럼 인덱스)
int cimg = cursor.getInt(1);
String ctinfo = cursor.getString(2);
int ccheck = cursor.getInt(4);
// 로그캣에 정보가 제대로 들어왔는지 확인하는 로그캣
Log.i("LEEJIN", cmtitle);
Log.i("LEEJIN", String.valueOf(cimg));
Log.i("LEEJIN", ctinfo);
Log.i("LEEJIN", String.valueOf(ccheck));
// 밑소스는 밑에 VO에 정보값을 넣는고 바로 그 정보값으로 getView로 Activity만든다.
arItem.add(new ListItem(0, cmtitle, cimg, ctinfo, ccheck));
// cursor.안에 정보값다 될때까지 반복된다.
}
// //데이터를 넣는 아이템 리스트입니다.
// arItem = new ArrayList<ListItem>();
// arItem.add(new ListItem(0,0x7f02002b, "아이디입니다", 1, "1000원"));
// 데이터 원본 준비
// arrayThemeName = new ArrayList<String>();
// 어댑터 준비
MultiAdapter MyAdapter = new MultiAdapter(this, arItem);
// 어댑터 연결
ListView MyList;
MyList = (ListView) findViewById(R.id.set_thememanage_list_list);
MyList.setAdapter(MyAdapter);
btnOk.setOnClickListener(new OnClickListener() {
// 클릭 이벤트를 처리한다.
public void onClick(View v) {
}
});
}
class ListItem {
int Type;// 항목뷰를 어떤걸 나타낼 것인지 0이면 textedit.xml 1이면 btnicon.xml
int Img;
int MCheck;
String MText;
String Tinfo;
ListItem(int aType, String aMText, int aImg, String aTinfo, int acheck) {
Type = aType;
Img = aImg;
MCheck = acheck;
MText = aMText;
Tinfo = aTinfo;
}
}
// 전 예제랑 비슷합니다. 오버라이딩할것은 하고
class MultiAdapter extends BaseAdapter {
LayoutInflater mInflater;
ArrayList<ListItem> arSrc;
// 생성자
public MultiAdapter(Context context, ArrayList<ListItem> arItem) {
// 인플레이트 준비를 합니다.
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
arSrc = arItem;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arSrc.size();
}
@Override
public ListItem getItem(int position) {
// TODO Auto-generated method stub
return arSrc.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public int getItemViewType(int position) {
return arSrc.get(position).Type;// 아까 Type가 0이면 textedit고 1이면
// btnicon이라고했죠?
}
// getView가 생성하는 뷰의 개수를 리턴한다. 항상 같은 뷰를 생성하면 1을 리턴한다.
// 지금 예제에서는 btnicon이라는 뷰와 textedit라는 뷰 2개 이므로 2를 리턴해야합니다.
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
int res = 0;
//최초 호출이면 항목 뷰를 생성한다.
//타입별로 뷰를 다르게 디자인 할 수 있으며 높이가 달라도 상관없다.
if(convertView == null){
res = getItemViewType(position);//현재 위치의 Type을 조사해보고
switch(res){
case 0://0이면 textedit
res = R.layout.set_thememanage_list_listview;
break;
// case 1://1이면 btnicon으로 R.layout값을 넣어주고
// res = R.layout.btnicon;
// break;
}
//아래 부분은 전예제에서 설명했죠? 중요한것은 res를 넘기는 것만 알아두시면 되고
//필요하면 다시 찾아서 보면됩니다
//인플레이트합니다. 즉 화면에 뿌립니다.
convertView = mInflater.inflate(res, parent, false);
}
//화면에 뿌린뒤 여기서 각항목에 해당하는 값을 바꿔주는 부분입니다.
res = getItemViewType(position);
switch(res){
case 0:
ImageView imgTitle = (ImageView)convertView.findViewById(R.id.set_thememanage_list_img);
imgTitle.setImageResource(arSrc.get(position).Img);
TextView txtMtitle = (TextView)convertView.findViewById(R.id.set_thememanage_list_mtitle);
txtMtitle.setText(arSrc.get(position).MText);
TextView txtTinfo = (TextView)convertView.findViewById(R.id.set_thememanage_list_tinfo);
txtTinfo.setText(arSrc.get(position).Tinfo);
CheckBox tmCheck = (CheckBox)convertView.findViewById(R.id.set_thememanage_list_listview_checkBox);
if(arSrc.get(position).MCheck == 1){
tmCheck.setChecked(true);
}else{
tmCheck.setChecked(false);
}
break;
// case 1:
// Button btn = (Button)convertView.findViewById(R.id.btn);
// btn.setText(arSrc.get(position).BtnText);
// ImageView img = (ImageView)convertView.findViewById(R.id.img);
// img.setImageResource(arSrc.get(position).IconRes);//이미지의 리소스를 지정합니다.
// //즉 이미지의 경로가됨
// break;
}
return convertView;//getCount만큼 반복한다고 했죠?
//리스트의 갯수만큼 반복하게 됩니다.
}
}
}
위의 소스에서 빨간색이 버튼 이벤트이고요ㅠㅜ
그 노란색이 getview에서 만들어지는 선언들입니다.
버튼 클릭시 안드로이드 SQL DB안에
체크되어있는 해당 포지션의
txtMtitle
이 정보값이 들어가야 되는데요...
어떻게 해야 될지 모르겠습니다...
제가 초보개발자이고 학생이다보니 ㅠㅜ
혼내도 좋으시니까 조언이랑 제가 응용할 수 있도록 약간의 예시 소스를 올려주시면 좋겠습니다 ㅠㅜ
좋은 하루 되세요!