Created a costum listview containing the photo, group name and checkbox. When selecting checkbox and scrolling checkbox, selections are randomly selected. How to solve this problem?

alt text

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="1"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/imageViewPhoto" android:src="@android:drawable/ic_menu_gallery"/> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="100dp" android:baselineAligned="false" android:weightSum="1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/textName" android:layout_weight="1.00"/> <CheckBox android:id="@+id/checkedTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:checkMark="?android:attr/listChoiceIndicatorMultiple" android:gravity="right|center_vertical" /> </LinearLayout> </LinearLayout> import tat.ilmir.myapplicationnew.appnew.R; import java.io.File; import java.util.List; /** * Created by ilmir4400 on 12/6/14. */ public class ListViewGroupsAdapter extends BaseAdapter { private List<Groups> list; private LayoutInflater layoutInflater; Context context; public ListViewGroupsAdapter(Context context, List<Groups> list) { this.list = list; this.context = context; layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = layoutInflater.inflate(R.layout.activity_item_groups, parent, false); } final Groups groups = getGroups(position); TextView textName = (TextView) view.findViewById(R.id.textName); ImageView imageViewPhoto = (ImageView) view.findViewById(R.id.imageViewPhoto); CheckBox checkBox = (CheckBox)view.findViewById(R.id.checkedTextView); textName.setText(groups.getName()); ImageView imageView = (ImageView) view.findViewById(R.id.imageViewPhoto); //Π²ΡŒΡŽΡ…Π°, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ String imageUrl = groups.getPhoto();//... // URL ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ (Π½-Ρ€: "http://site.com/image.png", "file:///mnt/sdcard/img/image.jpg") ImageLoader imageLoader = ImageLoader.getInstance(); // ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ экзСмпляр imageLoader.init(ImageLoaderConfiguration.createDefault(context)); // ΠŸΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ imageLoader.displayImage(imageUrl, imageView); File cacheDir = StorageUtils.getCacheDirectory(context, Boolean.parseBoolean("UniversalImageLoader/Cache")); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800) // width, height // .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75) // width, height, compress format, quality .threadPoolSize(5) .threadPriority(Thread.MIN_PRIORITY + 2) .denyCacheImageMultipleSizesInMemory() .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // 2 Mb .discCache(new UnlimitedDiscCache(cacheDir)) .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // .imageDownloader(new BaseImageDownloader(5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s) .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // .enableLogging() .build(); return view; } private Groups getGroups(int position) { return (Groups) getItem(position); } } 

    1 answer 1

     @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = layoutInflater.inflate(R.layout.activity_item_groups, parent, false); } Groups groups = getGroups(position); TextView textName = (TextView) view.findViewById(R.id.textName); ImageView imageViewPhoto = (ImageView) view.findViewById(R.id.imageViewPhoto); CheckBox checkBox = (CheckBox)view.findViewById(R.id.checkedTextView); checkBox.setOnCheckedChangeListener(myCheckChangList); // пишСм ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ checkBox.setTag(position); // заполняСм Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²: Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ checkBox.setChecked(groups.box); ....} 

    // handler for checkboxes

     OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // мСняСм Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠ²Π°Ρ€Π° (Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚) getGroups((Integer) buttonView.getTag()).box = isChecked; } };