저장된 Checkbox 값을 다시 불러오는데 문제가 있습니다.
조회수 4130회
안녕하세요. 안드로이드 앱을 개발하고 있는데요, 제 앱에서 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;
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
http://stackoverflow.com/questions/37224342/how-save-checkbox-checked-into-database
위 Stackoverflow 글의 두번째를 보고 해결했습니다! 감사합니다!
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력