Android 取消选中并向下滚动listview中的复选框后,该复选框将被选中。

Android 取消选中并向下滚动listview中的复选框后,该复选框将被选中。,android,checkbox,android-listview,baseadapter,Android,Checkbox,Android Listview,Baseadapter,我知道有人问了很多与我的问题类似的问题,但没有人回答我的问题 我有一个BaseAdapter,它准备了一个带有复选框的列表 以下是适配器的相关代码- @Override public View getView(final int position, View convertView, ViewGroup parent) { selectedFolderIds = new ArrayList<>(); selectedFolderNames =

我知道有人问了很多与我的问题类似的问题,但没有人回答我的问题

我有一个BaseAdapter,它准备了一个带有复选框的列表

以下是适配器的相关代码-

 @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        selectedFolderIds = new ArrayList<>();
        selectedFolderNames = new ArrayList<>();
        selectedFolderParentIds = new ArrayList<>();
        deselectedFolderIds = new ArrayList<>();

        final FolderStructureDataModel folderDetails = (FolderStructureDataModel) getItem(position);

        final ViewHolder holder;
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if(convertView == null) {
            convertView = inflater.inflate(R.layout.folder_structure_list_item_template,
                    parent, false);
            holder = new ViewHolder();
            holder.folderListLayout = (RelativeLayout) convertView.findViewById(R.id.folder_list_layout);
            holder.childFoldersIndicator = (ImageView)
                    convertView.findViewById(R.id.child_folders_indicator);
            holder.selectionCheckBox = (CheckBox) convertView.findViewById(R.id.checkbox);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
            holder.selectionCheckBox.setOnCheckedChangeListener(null);
            holder.selectionCheckBox.setOnClickListener(null);
        }

        /**
         * Attach the listeners to the checkboxes.
         */
        holder.selectionCheckBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CheckBox cb = (CheckBox) view;
                if (cb.isChecked()) {
                    selectedFolderIds.add(HelperFunctions.EncodeString(folderDetails.ID));
                    selectedFolderNames.add(HelperFunctions.EncodeString(folderDetails.DisplayName));
                    selectedFolderParentIds.add(HelperFunctions.EncodeString(folderDetails.ParentFolderID));

                    SelectedFolderListener selectedFolderListener =
                            (SelectedFolderListener) context;
                    selectedFolderListener.getSelectedFoldersArrayList(selectedFolderIds,
                            selectedFolderNames, selectedFolderParentIds);

                    Log.i("Test : " + folderDetails.DisplayName + " at position " +
                            String.valueOf(position), "Set to " +
                            String.valueOf(checkboxStatus.get(position))
                            + " From onClickListener");
                } else {
                    selectedFolderIds.remove(HelperFunctions.EncodeString(folderDetails.ID));
                    selectedFolderNames.remove(HelperFunctions
                            .EncodeString(folderDetails.DisplayName));
                    selectedFolderParentIds.remove(HelperFunctions
                            .EncodeString(folderDetails.ParentFolderID));
                    deselectedFolderIds.add(HelperFunctions.EncodeString(folderDetails.ID));

                    UnselectedFolderListener unselectedFolderListener =
                            (UnselectedFolderListener) context;
                    unselectedFolderListener.getDeselectedFolderArrayList(deselectedFolderIds);

                    Log.i("Test : " + folderDetails.DisplayName + " at position " +
                            String.valueOf(position), "Set to " +
                            String.valueOf(checkboxStatus.get(position))
                            + " From onClickListener");
                }
            }
        });

        holder.selectionCheckBox.setOnCheckedChangeListener
                (new CompoundButton.OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                        if (((buttonView).isChecked()) && isChecked) {
                            checkboxStatus.set(position, true);
                            Log.i("Test : " + folderDetails.DisplayName + " at position " +
                                    String.valueOf(position), "Set to " +
                                    String.valueOf(checkboxStatus.get(position))
                                    + " From onCheckChangedListener");
                        } else {
                            checkboxStatus.set(position, false);
                            Log.i("Test : " + folderDetails.DisplayName + " at position " +
                                    String.valueOf(position), "Set to " +
                                    String.valueOf(checkboxStatus.get(position))
                                    + " From onCheckChangedListener");
                        }
                    }
                });

        //Populate the data
        holder.selectionCheckBox.setText(String.valueOf(folderDetails.DisplayName));

        if(Integer.valueOf(folderDetails.ChildFolderCount) == 0) {
            holder.childFoldersIndicator.setVisibility(View.GONE);
            holder.folderListLayout.setFocusable(true);
            holder.folderListLayout.setClickable(true);
        } else {
            holder.childFoldersIndicator.setVisibility(View.VISIBLE);
            holder.folderListLayout.setFocusable(false);
            holder.folderListLayout.setClickable(false);
        }

        /**
         * Set the checkbox as per the service reply (status in the server)
         */
        if(Boolean.valueOf(folderDetails.IsAlreadySelected)) {
            holder.selectionCheckBox.setChecked(true);
            Log.i("Test : " + folderDetails.DisplayName + " at position " +
                    String.valueOf(position), "Set to " +
                    String.valueOf(holder.selectionCheckBox.isChecked()) + " From folderDetails");
        } else {
            holder.selectionCheckBox.setChecked(false);
            Log.i("Test : " + folderDetails.DisplayName + " at position " +
                    String.valueOf(position), "Set to " +
                    String.valueOf(holder.selectionCheckBox.isChecked()) + " From folderDetails");
        }

        /**
         * Set the checkbox as per the values maintained in the checkboxStatus ArrayList
         */
        if(checkboxStatus.get(position)) {
            holder.selectionCheckBox.setChecked(true);
            Log.i("Test : " + folderDetails.DisplayName + " at position " +
                    String.valueOf(position), "Set to " +
                    String.valueOf(holder.selectionCheckBox.isChecked()) + " From checkBoxStatus");
        } else {
            holder.selectionCheckBox.setChecked(false);
            Log.i("Test : " + folderDetails.DisplayName + " at position " +
                    String.valueOf(position), "Set to " +
                    String.valueOf(holder.selectionCheckBox.isChecked()) + " From checkBoxStatus");
        }

        return convertView;
    }
@覆盖
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
selectedFolderIds=newarraylist();
selectedFolderNames=new ArrayList();
SelectedFolderParentId=new ArrayList();
diselectedfolderids=newarraylist();
最终FolderStructureDataModel folderDetails=(FolderStructureDataModel)getItem(位置);
最终持票人;
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
if(convertView==null){
convertView=充气机。充气(R.layout.folder\u structure\u list\u item\u模板,
父母,假);
holder=新的ViewHolder();
holder.folderListLayout=(RelativeLayout)convertView.findViewById(R.id.folder\u list\u layout);
holder.childFoldersIndicator=(图像视图)
convertView.findViewById(R.id.child\u folders\u指示符);
holder.selectionCheckBox=(CheckBox)convertView.findViewById(R.id.CheckBox);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
holder.selectionCheckBox.setOnCheckedChangeListener(空);
holder.selectionCheckBox.setOnClickListener(空);
}
/**
*将侦听器附加到复选框。
*/
holder.selectionCheckBox.setOnClickListener(新视图.OnClickListener()中){
@凌驾
公共void onClick(视图){
复选框cb=(复选框)视图;
if(cb.isChecked()){
selectedFolderId.add(HelperFunctions.EncodeString(folderDetails.ID));
selectedFolderNames.add(HelperFunctions.EncodeString(folderDetails.DisplayName));
SelectedFolderParentId.add(HelperFunctions.EncodeString(folderDetails.ParentFolderID));
SelectedFolderListener SelectedFolderListener=
(SelectedFolderListener)上下文;
selectedFolderListener.GetSelectedFoldersArray列表(SelectedFolderId,
selectedFolderNames、SelectedFolderParentId);
Log.i(“测试:+folderDetails.DisplayName+”位于位置”+
字符串.valueOf(位置),“设置为”+
String.valueOf(checkboxStatus.get(位置))
+“来自监听器”);
}否则{
selectedFolderIds.remove(HelperFunctions.EncodeString(folderDetails.ID));
selectedFolderNames.remove(Helper)函数
.EncodeString(folderDetails.DisplayName));
SelectedFolderParentId.remove(Helper)函数
.EncodeString(folderDetails.ParentFolderID));
add(HelperFunctions.EncodeString(folderDetails.ID));
UnselectedFolderListener UnselectedFolderListener=
(未选择FolderListener)上下文;
GetUnselectedFolderListener.GetUnselectedFolderArrayList(UnselectedFolderId);
Log.i(“测试:+folderDetails.DisplayName+”位于位置”+
字符串.valueOf(位置),“设置为”+
String.valueOf(checkboxStatus.get(位置))
+“来自监听器”);
}
}
});
holder.selectionCheckBox.setOnCheckedChangeListener
(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(((按钮视图).isChecked())和&isChecked){
checkboxStatus.set(位置,true);
Log.i(“测试:+folderDetails.DisplayName+”位于位置”+
字符串.valueOf(位置),“设置为”+
String.valueOf(checkboxStatus.get(位置))
+“来自onCheckChangedListener”);
}否则{
checkboxStatus.set(位置,false);
Log.i(“测试:+folderDetails.DisplayName+”位于位置”+
字符串.valueOf(位置),“设置为”+
String.valueOf(checkboxStatus.get(位置))
+“来自onCheckChangedListener”);
}
}
});
//填充数据
holder.selectionCheckBox.setText(String.valueOf(folderDetails.DisplayName));
if(Integer.valueOf(folderDetails.ChildFolderCount)==0){
holder.childFoldersIndicator.setVisibility(View.GONE);
holder.folderListLayout.setFocusable(true);
holder.folderListLayout.setClickable(真);
}否则{
holder.childFoldersIndicator.setVisibility(View.VISIBLE);
holder.folderListLayout.setFocusable(false);
holder.folderListLayout.setClickable(假);
}
/**
*根据服务回复设置复选框(服务器中的状态)
*/
if(Boolean.valueOf(folderDetails.IsAlreadySelected)){
holder.selectionCheckBox.setChecked(true);
Log.i(“测试:+folderDetails.DisplayName+”位于位置”+
字符串.valueOf(位置),“设置
if(convertView == null) {
        convertView = inflater.inflate(R.layout.folder_structure_list_item_template,
                parent, false);
        holder = new ViewHolder();
        holder.folderListLayout = (RelativeLayout) convertView.findViewById(R.id.folder_list_layout);
        holder.childFoldersIndicator = (ImageView)
                convertView.findViewById(R.id.child_folders_indicator);
        holder.selectionCheckBox = (CheckBox) convertView.findViewById(R.id.checkbox);
  // Add this line, set tag on your checkbox.
 holder.selectionCheckBox .setTag(holder);
        convertView.setTag(holder);
    }
 holder.selectionCheckBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
         // add this line,declare holder_new as an instance of ViewHolder
        holder_new= (ViewHolder) view.getTag();
            // rest is your code what you have already written
    });