Android gridview点击实现checkbox全选和反选

在开发中有个需求需要实现点击全选checkbox,实现gridview的item实现全选或反选,首先要监听checkbox的事件,然后来刷新gridview,实现全选,反选
代码如下:

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.xinrui.filemanager.R;
import com.xinrui.filemanager.entity.FileItem;

import java.util.ArrayList;
import java.util.List;

public class FileGridViewAdapter extends BaseAdapter {

    private ArrayList<FileItem> myAppInfos;
    private LayoutInflater inflater;
    private Context context;
    private int display_type = 0;
    private boolean isDisplay = false,isChecked = false;
    private OnClickListener onClickListener;
    private List<String> checkBoxIDList;            //存储checkBox的值
    public List<String> getCheckBoxIDList() {
        return checkBoxIDList;
    }
    public FileGridViewAdapter(Context context, ArrayList<FileItem> myAppInfos,int display_type) {
        this.context = context;
        this.myAppInfos = myAppInfos;
        inflater = LayoutInflater.from(context);
        this.display_type = display_type;
        checkBoxIDList = new ArrayList<>();
    }
    public void setOnClickListener(OnClickListener onClickListener){this.onClickListener = onClickListener;}
    public void setIsDisplay(boolean isDisplay){
        this.isDisplay = isDisplay;
    }
    public void setIsChecked(boolean isChecked){
        this.isChecked = isChecked;
    }
    /**
     * 先判断数据集的大小是否足够显示满本页?myAppInfos.size() > (mIndex + img1)*mPagerSize
     * 如果满足,则此页就显示最大数量mPagerSize的个数
     * 如果不够显示每页的最大数量,那么剩下几个就显示几个 (myAppInfos.size() - mIndex*mPagerSize)
     */
    @Override
    public int getCount() {
        return myAppInfos.size();
    }

    @Override
    public Object getItem(int position) {
        return myAppInfos.get(position );
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if(convertView == null){
            holder = new ViewHolder();
            if(display_type == 1) {
                convertView = inflater.inflate(R.layout.file_samll_item_gridview, parent, false);
            } else if(display_type == 2){
                convertView = inflater.inflate(R.layout.file_large_item_gridview, parent, false);
            } else {
                convertView = inflater.inflate(R.layout.file_item_gridview, parent, false);
                holder.file_date = (TextView) convertView.findViewById(R.id.file_date);
                holder.file_size = (TextView) convertView.findViewById(R.id.file_size);
            }
            holder.file_name = (TextView) convertView.findViewById(R.id.file_name);
            holder.file_image = (ImageView) convertView.findViewById(R.id.file_img);
            holder.file_checkbox = (CheckBox)convertView.findViewById(R.id.file_checkbox);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        final FileItem fileItem = myAppInfos.get(position);
        holder.file_name.setText(fileItem.getFile_name());
        holder.file_image.setImageResource(fileItem.getFileImgId());
        if(isDisplay){
            holder.file_checkbox.setVisibility(View.VISIBLE);
            holder.file_checkbox.setChecked(isChecked);
            holder.file_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked){
                        if(!checkBoxIDList.contains(fileItem.getFile_path())) {
                            checkBoxIDList.add(fileItem.getFile_path());
                        }
                    }else{
                        checkBoxIDList.remove(fileItem.getFile_path());
                    }
                }
            });
        }
        if(display_type==0) {
            holder.file_date.setText(fileItem.getFile_date());
            holder.file_size.setText(fileItem.getFile_longth());
            if (position % 2 == 0) {
                convertView.setBackgroundResource(R.drawable.file_item_tap);
            }else{
                convertView.setBackgroundResource(android.R.color.transparent);
            }
        }
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(onClickListener!=null)
                    onClickListener.onClick(position);
            }
        });
        convertView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if(onClickListener!=null)
                    onClickListener.onLongClick(position);
                return true;
            }
        });
        return convertView;
    }

    class ViewHolder{
        private TextView file_name,file_date,file_size;
        private ImageView file_image;
        private CheckBox file_checkbox;
    }

    public interface OnClickListener{
        public void onClick(int position);
        public void onLongClick(int position);
    }
}

2.主页面

checkBox_area = (CheckBox) findViewById(R.id.checkbox_area);
        checkBox_area.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    ischecked = true;
                } else {
                    ischecked = false;
                }
                initFileData(currentFilePath);
            }
        });
        
        private void initFileData(String filepath) {
        fileItemsList = FileUtils.getInstance(this).getFileData(filepath);
        if (fileItemsList == null) return;
        fileGridViewAdapter = new FileGridViewAdapter(this, fileItemsList, display_type);
        file_gridview.setAdapter(fileGridViewAdapter);
        fileGridViewAdapter.setIsDisplay(isDisplay);
        fileGridViewAdapter.setIsChecked(ischecked);
        fileGridViewAdapter.setOnClickListener(this);
        if (fileItemsList.size() > 0) {
            initPreviewData(fileItemsList.get(0));
            right_area.setVisibility(View.VISIBLE);
        } else {
            right_area.setVisibility(View.GONE);
        }
    }

就这样完美的实现了需求

发布了262 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_41666295/article/details/105597496