CollectAdapter.java 6.78 KB
package com.cnlive.goldenline.ui.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
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.TextView;

import com.bumptech.glide.Glide;
import com.cnlive.goldenline.R;
import com.cnlive.goldenline.dao.History;
import com.cnlive.goldenline.model.mine.CollectionListResponseData;
import com.cnlive.goldenline.ui.base.BaseRecyclerAdapter;

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

import butterknife.BindView;
import butterknife.ButterKnife;

/**
 * Created by gujun on 2017-04-11
 * 我的收藏和我的历史共同的adapter
 */
public class CollectAdapter<T> extends BaseRecyclerAdapter<T> {
    private List<String> deleteVids;
    private boolean isEdit = false;
    private UpdateDeleteCountListener l;
    private boolean isAllSelect = false;

    public CollectAdapter(Context context) {
        super(context);
        deleteVids = new ArrayList<>();
    }

    public void setListener(UpdateDeleteCountListener listener) {
        l = listener;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.layout_item_collect, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (getItem(position) instanceof CollectionListResponseData) {
            ((ViewHolder) holder).show((CollectionListResponseData) getItem(position));
        } else if (getItem(position) instanceof History) {
            ((ViewHolder) holder).show((History) getItem(position));
        }

    }

    public String getDeleteVids() {
        if (deleteVids == null || deleteVids.size() <= 0) return "";
        StringBuilder vids = new StringBuilder();
        for (int i = 0; i < deleteVids.size(); i++) {
            vids.append(deleteVids.get(i)).append(i == deleteVids.size() - 1 ? "" : ",");
        }
        return vids.toString();
    }

    public void setEditState(boolean isEdit) {
        this.isEdit = isEdit;
        notifyDataSetChanged();
    }

    public void editFinish() {
        isEdit = false;
        cancelAllSelect();
    }

    public void selectAll() {
        isEdit = true;
        if (deleteVids == null && getItemCount() <= 0) return;
        for (int i = 0; i < getList().size(); i++) {
            String uuid = "";
            if (getItem(i) instanceof CollectionListResponseData) {
                uuid = ((CollectionListResponseData) getItem(i)).getVdUUID();
            } else if (getItem(i) instanceof History) {
                uuid = ((History) getItem(i)).getVdId();
            }
            if (!deleteVids.contains(uuid))
                deleteVids.add(uuid);
        }
        notifyDataSetChanged();
    }

    public void cancelAllSelect() {
        deleteVids.clear();
        if (l != null) l.onUpdateDeleteCount(deleteVids.size(), isAllSelect);
        notifyDataSetChanged();
    }

    public interface UpdateDeleteCountListener<T> {
        void onUpdateDeleteCount(int count, boolean isAllSelect);

        void onItemClick(T item);
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.image)
        ImageView image;
        @BindView(R.id.checkBox)
        CheckBox checkBox;
        @BindView(R.id.title_history)
        TextView title_history;
        @BindView(R.id.layout)
        View layout;

        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }


        public void show(final CollectionListResponseData item) {
            Glide.with(mContext).load(item.getVdCover()).error(R.drawable.default_background).into(image);
            title_history.setText(item.getVdShowTitle());
            checkBox.setVisibility(isEdit ? View.VISIBLE : View.GONE);
            if (deleteVids != null && deleteVids.size() > 0) {
                if (deleteVids.contains(item.getVdUUID()))
                    checkBox.setChecked(true);
                else {
                    checkBox.setChecked(false);
                }
            } else {
                checkBox.setChecked(false);
            }

            layout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (l != null) l.onItemClick(item);
                }
            });

            checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked && !deleteVids.contains(item.getVdUUID()))
                        deleteVids.add(item.getVdUUID());
                    else if (!isChecked && deleteVids.contains(item.getVdUUID()))
                        deleteVids.remove(item.getVdUUID());
                    isAllSelect = (deleteVids.size() == getItemCount() ? true : false);
                    if (l != null) l.onUpdateDeleteCount(deleteVids.size(), isAllSelect);
                }
            });
        }

        public void show(final History item) {
            Glide.with(mContext).load(item.getVdCover()).error(R.drawable.default_background).into(image);
            title_history.setText(item.getVdShowTitle());
            checkBox.setVisibility(isEdit ? View.VISIBLE : View.GONE);
            if (deleteVids != null && deleteVids.size() > 0) {
                if (deleteVids.contains(item.getVdId()))
                    checkBox.setChecked(true);
                else {
                    checkBox.setChecked(false);
                }
            } else {
                checkBox.setChecked(false);
            }

            layout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (l != null) l.onItemClick(item);
                }
            });

            checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked && !deleteVids.contains(item.getVdId()))
                        deleteVids.add(item.getVdId());
                    else if (!isChecked && deleteVids.contains(item.getVdId()))
                        deleteVids.remove(item.getVdId());
                    isAllSelect = (deleteVids.size() == getItemCount() ? true : false);
                    if (l != null) l.onUpdateDeleteCount(deleteVids.size(), isAllSelect);
                }
            });
        }
    }
}