package com.application.zhangshi_app_android.adapter;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.pm.ActivityInfo;
|
import android.view.View;
|
|
import androidx.annotation.Nullable;
|
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityOptionsCompat;
|
import androidx.core.util.Pair;
|
|
import com.android.app_base.base.adapter.BaseRVAdapter;
|
import com.application.zhangshi_app_android.R;
|
import com.application.zhangshi_app_android.databinding.ItemElectronicFileAddBinding;
|
import com.application.zhangshi_app_android.ui.ImagePreviewActivity;
|
import com.application.zhangshi_app_android.ui.PlayActivity;
|
import com.application.zhangshi_app_android.ui.VideoPlayActivity;
|
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
|
/**
|
* @author Ljj
|
* @date 2023.08.18. 23:54
|
* @desc 详情页里 可添加的电子文件 适配器
|
*/
|
public class ElectronicFileAddAdapter extends BaseRVAdapter<String, ItemElectronicFileAddBinding, BaseRVAdapter.BaseViewHolder<ItemElectronicFileAddBinding>> {
|
|
public static final String TAG = "ElectronicFileAddAdapter";
|
|
public static final int TYPE_NORMAL = 1;
|
public static final int TYPE_Add = 2;
|
public static final int TYPE_Add_INVISIBLE = 3;
|
|
private boolean isShowAddItem;//是否显示添加按钮,即是否为编辑状态 true 为显示,false 为隐藏
|
private boolean isShowDeleteIcon;//是否显示右上角图标 true 为显示,false 为隐藏
|
private boolean isShowSelectIcon = false;//是否显示左上角选中图标 true 为显示,false 为隐藏
|
private boolean isPreview = true;//是否开启长按预览 true 为开启,false 为不开启
|
private final Set<String> selectedItems = new HashSet<>();//被选中的item
|
private OnItemAndAddClickListener mItemAndAddClickListener;
|
|
|
public ElectronicFileAddAdapter(Context context) {
|
super(context);
|
}
|
|
@Override
|
protected int getLayoutId() {
|
return R.layout.item_electronic_file_add;
|
}
|
|
@Override
|
public int getItemCount() {
|
int dataSize = mDataList == null ? 0 : mDataList.size();
|
if (isShowAddItem){
|
return dataSize + 1;
|
}else {
|
if (dataSize == 0) {
|
return dataSize + 1;//没有数据时,需要多出一个item给添加按钮占位
|
}
|
return dataSize;
|
}
|
}
|
|
@Override
|
public int getItemViewType(int position) {
|
int dataSize = mDataList == null ? 0 : mDataList.size();
|
if (dataSize == 0){ //没有数据时,需要添加按钮占位
|
if (isShowAddItem) {
|
return TYPE_Add;
|
} else {
|
return TYPE_Add_INVISIBLE;
|
}
|
}else {
|
if (isShowAddItem) {
|
if (position == dataSize) {
|
return TYPE_Add;
|
} else {
|
return TYPE_NORMAL;
|
}
|
} else {
|
return TYPE_NORMAL;
|
}
|
}
|
|
}
|
|
@Override
|
protected void onBind(BaseViewHolder<ItemElectronicFileAddBinding> holder, int position) {
|
if (getItemViewType(position) == TYPE_Add) {
|
holder.getBinding().flAdd.setVisibility(View.VISIBLE);
|
holder.getBinding().flImage.setVisibility(View.GONE);
|
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (mItemAndAddClickListener != null) {
|
mItemAndAddClickListener.onAddClick();
|
}
|
}
|
});
|
} else if (getItemViewType(position) == TYPE_Add_INVISIBLE){
|
holder.getBinding().flAdd.setVisibility(View.INVISIBLE);
|
holder.getBinding().flImage.setVisibility(View.GONE);
|
} else if (getItemViewType(position) == TYPE_NORMAL){
|
holder.getBinding().flAdd.setVisibility(View.GONE);
|
holder.getBinding().flImage.setVisibility(View.VISIBLE);
|
|
//非预览状态下,点击item 调用 mItemAndAddClickListener.onItemClick
|
//预览状态下,点击item 调用 相应的 文件预览
|
if (!isPreview){
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (mItemAndAddClickListener != null) {
|
mItemAndAddClickListener.onItemClick(holder.itemView,position);
|
}
|
}
|
});
|
}
|
|
String item = mDataList.get(position);
|
if (item != null) {
|
if (item.endsWith(".pdf")) {
|
holder.getBinding().ivImage.setImageResource(R.drawable.ic_pdf);
|
} else if (item.endsWith(".zip") || item.endsWith(".aar") || item.endsWith(".7z")) {
|
holder.getBinding().ivImage.setImageResource(R.drawable.ic_zip);
|
} else if (item.endsWith(".doc") || item.endsWith(".docx")) {
|
holder.getBinding().ivImage.setImageResource(R.drawable.ic_word);
|
} else if (item.endsWith(".xls") || item.endsWith(".xlsx")) {
|
holder.getBinding().ivImage.setImageResource(R.drawable.ic_excel);
|
} else if (item.endsWith(".ppt") || item.endsWith(".pptx")) {
|
holder.getBinding().ivImage.setImageResource(R.drawable.ic_ppt);
|
} else if (item.endsWith(".txt")) {
|
holder.getBinding().ivImage.setImageResource(R.drawable.ic_txt);
|
} else if (item.endsWith(".jpg") || item.endsWith(".jpeg") || item.endsWith(".png") || item.endsWith(".gif")) {
|
holder.getBinding().setUrl(item);
|
if (isPreview) {
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
ImagePreviewActivity.start(mContext, item);
|
}
|
});
|
}
|
} else if (item.endsWith(".mp4")) {
|
holder.getBinding().flPlay.setVisibility(View.VISIBLE);
|
holder.getBinding().setUrl(item);
|
if (isPreview) {
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
// new VideoPlayActivity.Builder()
|
// .setVideoSource(item)
|
// .setActivityOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
|
// .start(mContext);
|
PlayActivity.start((Activity) mContext, item,holder.itemView,true);
|
|
}
|
});
|
}
|
|
} else if (item.endsWith(".mp3") || item.endsWith(".m4a")) {
|
// holder.getBinding().flPlay.setVisibility(View.VISIBLE);
|
holder.getBinding().ivImage.setImageResource(R.drawable.ic_audio);
|
} else {
|
holder.getBinding().ivImage.setImageResource(R.drawable.ic_others);
|
}
|
}
|
|
if (isShowAddItem) {
|
holder.getBinding().ivDelete.setVisibility(View.VISIBLE);
|
} else {
|
holder.getBinding().ivDelete.setVisibility(View.GONE);
|
}
|
|
if (isShowDeleteIcon) {
|
holder.getBinding().ivDelete.setVisibility(View.VISIBLE);
|
} else {
|
holder.getBinding().ivDelete.setVisibility(View.GONE);
|
}
|
|
if (isShowSelectIcon) {
|
holder.getBinding().ivSelect.setVisibility(View.VISIBLE);
|
if (selectedItems.contains(item)){
|
holder.getBinding().ivSelect.setBackgroundResource(R.drawable.ic_checked);
|
} else {
|
holder.getBinding().ivSelect.setBackgroundResource(R.drawable.ic_unchecked);
|
}
|
} else {
|
holder.getBinding().ivSelect.setVisibility(View.GONE);
|
}
|
|
}
|
}
|
|
@Override
|
protected BaseViewHolder<ItemElectronicFileAddBinding> getViewHolder(ItemElectronicFileAddBinding itemBind, int viewType) {
|
return new BaseViewHolder<>(itemBind);
|
}
|
|
public void setItemAndAddClickListener(OnItemAndAddClickListener itemAndAddClickListener) {
|
mItemAndAddClickListener = itemAndAddClickListener;
|
}
|
|
public interface OnItemAndAddClickListener {
|
/**
|
* item点击事件
|
*/
|
void onItemClick(View itemView, int position);
|
|
/**
|
* 添加电子文件
|
*/
|
void onAddClick();
|
}
|
|
public void setShowAddItem(boolean showAddItem) {
|
isShowAddItem = showAddItem;
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
public void setShowDeleteIcon(boolean showDeleteIcon) {
|
isShowDeleteIcon = showDeleteIcon;
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
public void setShowSelectIcon(boolean showSelectIcon) {
|
isShowSelectIcon = showSelectIcon;
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
public void setIsEdited(boolean isEdit) {
|
setShowAddItem(isEdit);
|
setShowDeleteIcon(isEdit);
|
}
|
|
|
public void addSelectedItem(String item) {
|
selectedItems.add(item);
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
public void addSelectedItems(List<String> items) {
|
selectedItems.addAll(items);
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
public void removeSelectedItem(String item) {
|
selectedItems.remove(item);
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
public void changeSelectedItem(String item) {
|
if (selectedItems.contains(item)) {
|
selectedItems.remove(item);
|
} else {
|
selectedItems.add(item);
|
}
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
@Override
|
public void setData(@Nullable List<String> data) {
|
selectedItems.clear();
|
super.setData(data);
|
}
|
|
public void clearSelectedItems() {
|
selectedItems.clear();
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
public Set<String> getSelectedItems() {
|
return selectedItems;
|
}
|
|
public void changeSingleSelected(String item) {
|
if (selectedItems.contains(item)) {
|
selectedItems.remove(item);
|
} else {
|
selectedItems.clear();
|
selectedItems.add(item);
|
}
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
public void setPreview(boolean preview) {
|
isPreview = preview;
|
notifyItemRangeChanged(0, getItemCount());
|
}
|
|
}
|