저장된 Checkbox 값을 다시 불러오는데 문제가 있습니다.


안녕하세요. 안드로이드 앱을 개발하고 있는데요, 제 앱에서 Listview 내의 체크박스를 선택 후 ArrayList에 해당 부분의 특정 텍스트를 담고 그 부분을 저장해놓고, 종료한 다음 저장했던 부분을 이용해 다시 켰을때 똑같은 체크박스가 체크되어야 하는데요,

for문을 사용해서 다음 코드와 같이 체크했습니다.

for(int i=0; i<TargetList.size(); i++) {
                if(TargetList.get(i).equals(appListItem.PackageName)) {
                    if(holder.checkBox.isChecked()) {
                        holder.checkBox.setChecked(false);
                    }
                    else {
                        holder.checkBox.setChecked(true);
                    }
                }
            }

그런데 이렇게 체크했더니 잘 되는 것 같았는데 가끔씩 누른 체크박스가 아닌 엉뚱한 다른 체크박스가 해제되는 문제가 발생했습니다. 몇 시간동안 생각해봤으나 어떻게 해결해야할지 잘 모르겠네요 ㅠㅠ

문제가 되는 Adapter의 getView 전체 소스코드 입니다.

    @Override
    public View getView(final int pos, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        final appListItem appListItem = mListData.get(pos);
        ArrayList<String> TargetList = Util.getStringArrayPref(context, "TargetList");
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        try {
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.select_listview, parent, false);
                holder = new ViewHolder();
                holder.PackageName = (TextView) convertView.findViewById(R.id.packagenames);
                holder.Label = (TextView) convertView.findViewById(R.id.applabel);
                holder.Icon = (ImageView) convertView.findViewById(R.id.appicon);
                holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.PackageName.setText(appListItem.PackageName);
            holder.PackageName.setTag(pos);
            holder.Label.setText(appListItem.Label);
            holder.Label.setTag(pos);

            if (appListItem.Icon != null) {
                holder.Icon.setVisibility(View.VISIBLE);
                holder.Icon.setImageDrawable(appListItem.Icon);
            } else {
                holder.Icon.setVisibility(View.GONE);
            }

            holder.checkBox.setChecked(((ListView)parent).isItemChecked(pos));
            holder.checkBox.setTag(pos);

            for(int i=0; i<TargetList.size(); i++) {
                if(TargetList.get(i).equals(appListItem.PackageName)) {
                    if(holder.checkBox.isChecked()) {
                        holder.checkBox.setChecked(false);
                    }
                    else {
                        holder.checkBox.setChecked(true);
                    }
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return convertView;
    }
  • 2016년 12월 31일에 작성됨
    학생 / Android, PHP 공부중입니다!

조회수 1517


Banner slack 2x iegsyt

1 답변


좋아요
0
싫어요
채택취소하기

http://stackoverflow.com/questions/37224342/how-save-checkbox-checked-into-database

위 Stackoverflow 글의 두번째를 보고 해결했습니다! 감사합니다!

  • 2016년 12월 31일에 작성됨
    학생 / Android, PHP 공부중입니다!

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close