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

커스텀 listview 안의 getview에서 만들어진 checkbox 체크여부

0 추천

 

 

안녕하세요!

 

오늘도 수고가 정말 많으십니다 ㅠㅜ

 

다름이 아니라 제가 커스텀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);
         
         
         
         
 
         
        <span style="color:#ff0000;"><strong>btnOk.setOnClickListener(new OnClickListener() {
            // 클릭 이벤트를 처리한다.
            public void onClick(View v) {
                 
 
            }
        });
</strong></span>
    }
 
    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:                        
                            <span style="color:#ffff00;">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);
                            }</span>
       
                            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안에 

 

체크되어있는 해당 포지션의 

 

<span style="color: rgb(255, 255, 0);">txtMtitle</span>

이 정보값이 들어가야 되는데요...

 

어떻게 해야 될지 모르겠습니다...

 

제가 초보개발자이고 학생이다보니 ㅠㅜ

혼내도 좋으시니까 조언이랑 제가 응용할 수 있도록 약간의 예시 소스를 올려주시면 좋겠습니다 ㅠㅜ

 

좋은 하루 되세요!

가비저 (200 포인트) 님이 2013년 2월 22일 질문
아 위에 소스중에 색상을 바꿨는데 표시가 안났네요 ㅠㅜ

btnOk.setOnClickListener(new OnClickListener() {
            // 클릭 이벤트를 처리한다.
            public void onClick(View v) {
                
            }
        });

이 부분이 빨간색이고



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);
                            }


getview안에있는 이 소스가 노란색입니다 ㅠㅜ

감사합니다
어레이리스트에 boolean 변수하나 두시고
falsef로 초기잡고.... 체크할경우 해당 포지션 변수 true  해제할경우 false로
하시고 ok 버튼에서 포문돌면서 체크한값들만 모아서 디비에 때려박아넣으시길

1개의 답변

0 추천

리스트뷰 내의 컴포넌트의 클릭리스너를 구현하시려면

OnItemClickListener 를 사용하시면 됩니다.

 

itemClicker = new OnItemClickListener() {
 
@Override
public void onItemClick(AdapterView<?> 데이터, View 클릭한뷰, int 아이템번호, long arg3) {
}
};
Noizbuster (11,970 포인트) 님이 2013년 2월 24일 답변
...