DetailGdItemAdapter.java 9.99 KB
package com.sw.laryngoscope.adapter;

import android.annotation.SuppressLint;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.sw.laryngoscope.R;
import com.sw.laryngoscope.common.InitParam;
import com.sw.laryngoscope.db.RecordInfoDB;
import com.sw.laryngoscope.utils.Logger;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class DetailGdItemAdapter extends RecyclerView.Adapter<DetailGdItemAdapter.ViewHolder> {

    private Context context;
    private List<RecordInfoDB> list;
    public List<Boolean> checkList = new ArrayList<>();
    private LayoutInflater mInflater;
    private OnClickLitener listener;
    private ViewHolder viewHolder;
    private View view;

    @SuppressLint("NotifyDataSetChanged")
    public void setList(List<RecordInfoDB> list) {
        this.list = list;
        checkList.clear();
        for ( RecordInfoDB tmp:list ) {
            checkList.add(false);
        }
        notifyDataSetChanged();
    }

    public void setCheckItem(int position) {
        notifyDataSetChanged();
    }

    public void setAllCheck(boolean ischeck) {
        checkList.clear();
        for ( RecordInfoDB tmp:list ) {
            checkList.add(ischeck);
        }
    }

    @SuppressLint("NotifyDataSetChanged")
    public void setsingleCheck(int position) {
        checkList.set(list.size() - position - 1, !checkList.get(list.size() - position - 1));
        notifyDataSetChanged();
    }

    public void setRangeCheck(int startPosition, int endPosition) {
        if ( startPosition < 0 || endPosition < 0 ) {
            return ;
        }
        for ( int i = startPosition; i <= endPosition; i++ ) {
            checkList.set(list.size() - i - 1, !checkList.get(list.size() - i - 1));
        }
        notifyDataSetChanged();
    }

    public void setSelected(int position, boolean selected) {
        checkList.set(list.size() - position - 1, !checkList.get(list.size() - position - 1));
        notifyDataSetChanged();
    }

    public void selectRangeChange(int start, int end, boolean isSelected) {
        for ( int i = start; i <= end; i++ ) {
            checkList.set(list.size() - i - 1, !checkList.get(list.size() - i - 1));
        }
        notifyDataSetChanged();
    }

    public int getCheckNum() {
        int num = 0;
        for ( boolean tmp:checkList ) {
            if ( tmp ) {
                num++;
            }
        }
        return num;
    }

    public int getVideoNum() {
        int num = 0, i = 0;
        for ( boolean tmp:checkList ) {
            if ( tmp ) {
                RecordInfoDB temp = list.get( i );
                if ( temp.getType() == InitParam.FILE_VIDEO ) {
                    num++;
                }
            }
            i++;
        }
        return num;
    }

    public int getImageNum() {
        int num = 0, i = 0;
        for ( boolean tmp:checkList ) {
            if ( tmp ) {
                RecordInfoDB temp = list.get( i );
                //Logger.d(" getVideoNum " + temp.getFilename() + " getType " + temp.getType());
                if ( temp.getType() == InitParam.FILE_PHOTO ) {
                    num++;
                }
            }
            i++;
        }
        return num;
    }

    public int getReportNum() {
        int num = 0, i = 0;
        for ( boolean tmp:checkList ) {
            if ( tmp ) {
                //Logger.d(" getVideoNum " + temp.getFilename() + " getType " + temp.getType());
                num++;
            }
            i++;
        }
        return num;
    }

    public DetailGdItemAdapter(Context context, List<RecordInfoDB> list) {
        this.context = context;
        this.list = list;
        for ( RecordInfoDB tmp:list ) {
            checkList.add(false);
        }
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public int getCount() {
        return list.size();
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        view = LayoutInflater.from(context).inflate(R.layout.item_file_detail, null);
        viewHolder = new ViewHolder(view);
        view.setOnLongClickListener(longClickListener);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
        RecordInfoDB temp = list.get( list.size() - position -1 );
        String file;
        if ( temp.getType() == InitParam.FILE_PHOTO ) {
            holder.imagetype.setImageResource(R.mipmap.img_gallery);
            file = temp.getFilepath() + File.separator + temp.getFilename();
        } else if ( temp.getType() == InitParam.FILE_VIDEO ) {
            holder.imagetype.setVisibility(View.VISIBLE);
            holder.imagetype.setImageResource(R.mipmap.img_film);
            file = temp.getThumbnailpath() + File.separator + temp.getThumbnailname();
        } else {
            holder.imagetype.setVisibility(View.VISIBLE);
            holder.imagetype.setImageResource(R.mipmap.img_doc);
            file = temp.getThumbnailpath() + File.separator + temp.getThumbnailname();
        }
        Glide.with(context).load( Uri.fromFile(new File(file)) ).into(holder.item_detail_img);
        /*if ( listname.get(position).equals(context.getString(R.string.position_parlor))) {
            holder.img_item.setImageResource(R.mipmap.parlor);
        }
        holder.tv_name.setText(listname.get(position));*/
        holder.txt_name.setText(temp.getTitle());
        holder.item_detail_img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //int position = (Integer) v.getTag();
                listener.onItemClick(list.size() - position -1);//数据库新日期在底部,但是显示时放在顶部,所以计算序号
            }
        });

        holder.lay_checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isChecked = !holder.item_detail_checkbox.isChecked();
                checkList.set(list.size() - position - 1, isChecked);
                //Logger.d(" getImageNum " + getImageNum() + " isChecked " + isChecked + " position " + ( position ));
                //Logger.d(" getVideoNum " + getVideoNum() + " checkList " + checkList.toString() + list.get(
                //        list.size() - position - 1).getFilename());
                if ( listener != null ) {
                    listener.onSelClick(position, isChecked);
                }
                for ( RecordInfoDB tmp:list ) {
                    Logger.d(" getVideoNum " + tmp.getFilename() + " getType " + tmp.getType());
                }

                holder.item_detail_checkbox.setChecked(checkList.get(list.size() - position -1));
                notifyDataSetChanged();
            }
        });
        holder.item_detail_checkbox.setChecked(checkList.get(list.size() - position -1));
        if ( checkList.get(list.size() - position -1) ) {
            holder.txt_name.setTextColor(context.getResources().getColor(R.color.color_0aede0));
        } else {
            holder.txt_name.setTextColor(context.getResources().getColor(R.color.color_white));
        }
    }
    /*holder.item_detail_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if ( buttonView.isPressed() && listener != null ) {
                    checkList.set(list.size() - position - 1, isChecked);
                    //Logger.d(" getImageNum " + getImageNum() + " isChecked " + isChecked + " position " + ( position ));
                    //Logger.d(" getVideoNum " + getVideoNum() + " checkList " + checkList.toString() + list.get(
                    //        list.size() - position - 1).getFilename());
                    listener.onSelClick(position, isChecked);
                    for ( RecordInfoDB tmp:list ) {
                        Logger.d(" getVideoNum " + tmp.getFilename() + " getType " + tmp.getType());
                    }
                    notifyDataSetChanged();
                }
            }
        });*/

    class ViewHolder extends RecyclerView.ViewHolder  {
        //@BindView(R.id.img_item)
        ImageView item_detail_img;
        ImageView imagetype;
        //@BindView(R.id.tv_name)
        CheckBox item_detail_checkbox;
        RelativeLayout lay_checkbox;
        TextView txt_name;

        ViewHolder(View view) {
            super(view);
            //ButterKnife.bind(this, view);
            item_detail_img = (ImageView)view.findViewById(R.id.item_detail_img);
            imagetype = (ImageView)view.findViewById(R.id.imagetype);
            item_detail_checkbox = (CheckBox)view.findViewById(R.id.item_detail_checkbox);
            lay_checkbox = (RelativeLayout)view.findViewById(R.id.lay_checkbox);
            txt_name = (TextView)view.findViewById(R.id.txt_name);
        }
    }

    public OnClickLitener getListener() {
        return listener;
    }

    public void setOnClickLitener(OnClickLitener listener) {
        this.listener = listener;
    }

    public interface OnClickLitener {
        void onItemClick(int position);
        void onSelClick(int position, boolean isChecked);
    }

    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    private View.OnLongClickListener longClickListener;

    public void setLongClickListener(View.OnLongClickListener clickListener) {
        this.longClickListener = clickListener;
    }

}