이 문제에 대한 다른 여러 가지 해결책을 살펴 보았지만 그 중 일부는 완전히 근본적으로 다르다는 이유로 나에게 적합하지 않습니다. 내 어댑터에는 장치에 설치된 앱을 나열하는 PackageInfo 클래스가 있습니다. 그 부분은 작동합니다. 각 앱 옆에 해당 앱을 카테고리 1 또는 2로 분류하는 두 개의 체크 박스가 있습니다. 사용자의 선택을 SharedPreference에 저장했습니다 (모든 사용자 입력을 저장할 수있는 더 나은 방법에 대한 의견이 도움이되지만 내 관심사는 아닙니다).).체크 박스가있는 목록보기, 스크롤 관련 문제
몇 가지 다른 해결책을 살펴 보았습니다. 근본적으로 여기에 뭔가 빠져있는 것 같습니다. 사용자가 스크롤 할 때 문제가 발생하며 확인란을 무작위로 선택하거나 선택 취소합니다.
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater inflater = context.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_layout, null);
holder = new ViewHolder();
holder.apkName = (TextView) convertView.findViewById(R.id.appname);
holder.category1 = (CheckBox) convertView.findViewById(R.id.arcade);
holder.category1.setTag(position);
holder.category2 = (CheckBox) convertView.findViewById(R.id.educational);
holder.category2.setTag(position);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
PackageInfo packageInfo = (PackageInfo) getItem(position);
Drawable appIcon = packageManager.getApplicationIcon(packageInfo.applicationInfo);
final String appName = packageManager.getApplicationLabel(packageInfo.applicationInfo).toString();
final String appPositionArcade = "cat1"+appName;
final String appPositionEdu = "cat2"+appName;
appIcon.setBounds(0, 0, 55, 55);
holder.apkName.setCompoundDrawables(appIcon, null, null, null);
holder.apkName.setCompoundDrawablePadding(15);
holder.apkName.setText(appName);
holder.category1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (holder.category1.isChecked()) {
holder.category2.setChecked(false);
SharedPreferences stored = context.getSharedPreferences("Shared Preferences", 0);
SharedPreferences.Editor editor = stored.edit();
editor.putBoolean(appPositionArcade, true);
editor.putBoolean(appPositionEdu, false);
} else if (!holder.category1.isChecked()) {
SharedPreferences stored = context.getSharedPreferences("Shared Preferences", 0);
SharedPreferences.Editor editor = stored.edit();
editor.putBoolean(appPositionArcade, false);
}
}
});
holder.category2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (holder.category2.isChecked()) {
SharedPreferences stored = context.getSharedPreferences("Shared Preferences", 0);
SharedPreferences.Editor editor = stored.edit();
holder.category1.setChecked(false);
editor.putBoolean(appPositionArcade, false);
editor.putBoolean(appPositionEdu, true);
} else if (!holder.category2.isChecked()) {
SharedPreferences stored = context.getSharedPreferences("Shared Preferences", 0);
SharedPreferences.Editor editor = stored.edit();
editor.putBoolean(appPositionEdu, false);
}
}
});
return convertView;
}