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

커스텀리스트뷰 체크박스 사용 질문입니다..

0 추천

현재 커스텀리스트뷰를 사용중인데요.

해당 row를 클릭했을때 체크박스가 체크가 되도록 하려고합니다.

여기서 생기는 문제점인데요.

해당 row를 클릭하면... 해당 row의 체크박스가 선택이되야하는데...

체크박스의 position을 지정? 해주는 방법을모르겠습니다..

아래 소스와같이 했을때는 맨 마지막 체크박스에만 체크가되네요...

어떻게 해결을 해야할까요..?

 

public listdata_3(Context context, int layout,
                          ArrayList<EachList_4> listlist) {
            this.context = context;
            this.layout = layout;
            this.datalist = listlist;
            inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        @Override
        public int getCount() {
            return datalist.size();
        }

        @Override
        public Object getItem(int position) {
            return datalist.get(position);

        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        public String getBArtCode(int position) {
            return datalist.get(position).BArtCode;
        }


        public String getBArtNAme(int position) {
            return datalist.get(position).BArtNAme;
        }


        public String getBStanDard(int position) {
            return datalist.get(position).BStanDard;
        }

        public String getBUnit(int position) {
            return datalist.get(position).BUnit;
        }

        public String getBSaleCost(int position) {
            return datalist.get(position).BSaleCost;
        }

        public String getBAMount(int position) {
            return datalist.get(position).BAMount;
        }

        public String getBjAMount(int position) {
            return datalist.get(position).BjAMount;
        }

        @Override
        public View getView(final int position, View convertView, final ViewGroup parent) {
            if (convertView == null) {
                convertView = inflater.inflate(layout, parent, false);
            }
            final CheckBox chkbox = (CheckBox) convertView.findViewById(R.id.chkbox);
            TextView TxtbonsaArtCode = (TextView) convertView
                    .findViewById(R.id.TxtbonsaArtCode);
            TextView TxtbonsaArtNAme = (TextView) convertView
                    .findViewById(R.id.TxtbonsaArtNAme);
            TextView TxtbonsaStanDard = (TextView) convertView
                    .findViewById(R.id.TxtbonsaStanDard);
            TextView TxtbonsaUnit = (TextView) convertView
                    .findViewById(R.id.TxtbonsaUnit);
            TextView TxtSaleCost = (TextView) convertView
                    .findViewById(R.id.TxtSaleCost);
            TextView TxtbonsaAMount = (TextView) convertView
                    .findViewById(R.id.TxtbonsaAMount);
            TextView TxtjAMount = (TextView) convertView
                    .findViewById(R.id.TxtjAMount);

            TxtbonsaArtCode.setText(datalist.get(position).BArtCode);

            TxtbonsaArtNAme.setText(datalist.get(position).BArtNAme);

            TxtbonsaStanDard.setText(datalist.get(position).BStanDard);
            TxtbonsaUnit.setText(datalist.get(position).BUnit);
            TxtSaleCost.setText(datalist.get(position).BSaleCost+" ");
            TxtbonsaAMount.setText(datalist.get(position).BAMount+" ");
            TxtjAMount.setText(datalist.get(position).BjAMount+" ");

            bonsajeago.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                    chkbox.setChecked(true);
                }
            });


            return convertView;
        }
    }

 

아잉훗 (570 포인트) 님이 2016년 5월 11일 질문

1개의 답변

0 추천
chkbox.setChecked(true); 가 문제 인거고요

EachList_4 에 boolean값 저장하는 변수 하나 더 만드셔서

boolean getChecked = !datalist.get(position).isChecke;

chkbox.setChecked(getChecked );

datalist.get(position).setChecked(getChecked );

notifyDataSetInvalidated();

대충 이런식으로 해주면 스크롤이 되도 체크한게 풀리지 않고 될꺼같아요...
페어리 (12,270 포인트) 님이 2016년 5월 11일 답변
이해가 안되는 부분이있습니다..
현재 리스트를...

   private void ListDataSetting1() {

        String count = pref.getString("Count", "");
        for (int a= 0; a < Integer.parseInt(count); a++) {

            adddataList1(pref.getString("BArtCode" + a, ""),
                    pref.getString("BArtNAme" + a, ""),
                    pref.getString("BStanDard" + a, ""),
                    pref.getString("BUnit" + a, ""),
                    pref.getString("BSaleCost" + a, ""),
                    pref.getString("BAMount" + a, ""),
                    pref.getString("BjAMount" + a, ""));
        }
    }

private void adddataList1(String BArtCode, String BArtNAme, String BStanDard,
                             String BUnit, String BSaleCost, String BAMount, String BjAMount) {
        listdata1.add(new EachList_4(BArtCode, BArtNAme, BStanDard, BUnit , BSaleCost, BAMount, BjAMount));
        setdataList1();
    }

    private void setdataList1() {
        bonsajeago.setAdapter(li2);
    }

이런식으로 setAdapter를 해주고있습니다..

EachList_4에 boolean값 저장하는 변수를 하나 더만들라고하셨는데..
그럼 setAdapter 부분에서도 boolean값으로 넘겨줘야하는데..

체크안됨 -->> boolean 값 false을 넘겨줘야하는건가요...??
죄송하지만 상세히 설명좀 부탁드릴게요..ㅠㅠ

하단은 EachList_4 소스입니다..

public class EachList_4 implements Serializable {

    public String BArtCode, BArtNAme, BStanDard, BUnit , BSaleCost, BAMount, BjAMount;
    public EachList_4(String BArtCode, String BArtNAme,
                      String BStanDard, String BUnit, String BSaleCost, String BAMount, String BjAMount) {
        super();

        this.BArtCode = BArtCode;
        this.BArtNAme = BArtNAme;
        this.BStanDard = BStanDard;
        this.BUnit = BUnit;
        this.BSaleCost = BSaleCost;
        this.BAMount = BAMount;
        this.BjAMount = BjAMount;


    }


    public void setBArtCode(String BArtCode) {
        this.BArtCode = BArtCode;
    }

    public void setBArtNAme(String BArtNAme) {
        this.BArtNAme = BArtNAme;
    }

    public void setBStanDard(String BStanDard) {
        this.BStanDard = BStanDard;
    }

    public void setBUnit(String BUnit) {
        this.BUnit = BUnit;
    }

    public void setBSaleCost(String BSaleCost) {
        this.BSaleCost = BSaleCost;
    }
    public void setBAMount(String BAMount) {
        this.BAMount = BAMount;
    }
    public void setBjAMount(String BjAMount) {
        this.BjAMount = BjAMount;
    }
}
저라면 EachList4 에

private boolean isCheck; 를 추가하고
 public EachList_4(String BArtCode, String BArtNAme,
                      String BStanDard, String BUnit, String BSaleCost, String BAMount, String BjAMount, setCheck) {
        super();

this.isCheck = setCheck;
.....
}

public void setCheck(boolean setCheck){
this.isCheck = setCheck;
}

public boolean isChecked(){
return isCheck;
}

대충 이런식으로 추가하고 ListDataSetting1() 메소드에서

private void ListDataSetting1() {

        String count = pref.getString("Count", "");
        for (int a= 0; a < Integer.parseInt(count); a++) {

            adddataList1(pref.getString("BArtCode" + a, ""),
                    pref.getString("BArtNAme" + a, ""),
                    pref.getString("BStanDard" + a, ""),
                    pref.getString("BUnit" + a, ""),
                    pref.getString("BSaleCost" + a, ""),
                    pref.getString("BAMount" + a, ""),
                    pref.getString("BjAMount" + a, ""),
                    false
                    );
        }
    }

private void adddataList1(String BArtCode, String BArtNAme, String BStanDard,
                             String BUnit, String BSaleCost, String BAMount, String BjAMount, boolean setCheck) {
        listdata1.add(new EachList_4(BArtCode, BArtNAme, BStanDard, BUnit , BSaleCost, BAMount, BjAMount, setCheck));
        setdataList1();
    }

이렇게 하긴 할껀데 소스만 봐도 조금 어렵게 커스텀을 하고 계신거 같내요...
...