package com.application.zhangshi_app_android.adapter; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.view.View; import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.app_base.base.adapter.BaseRVAdapter; import com.android.app_base.base.dialog.BaseDialog; import com.android.app_base.base.dialog.UIDialog; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.utils.Utils; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.MemoBean; import com.application.zhangshi_app_android.databinding.ItemMemoBinding; import com.github.gzuliyujiang.wheelpicker.DatePicker; import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; import com.github.gzuliyujiang.wheelpicker.entity.DateEntity; import com.github.gzuliyujiang.wheelpicker.impl.UnitDateFormatter; import com.github.gzuliyujiang.wheelpicker.widget.DateWheelLayout; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; /** * @author Ljj * @date 2023.06.12. 13:08 * @desc */ public class MemoRvAdapter extends BaseRVAdapter> { private final Map expendMap = new HashMap<>(); private boolean isEdited = false; private List deleteList; private List addList; private List updateList; public MemoRvAdapter(Context context) { super(context); } @Override protected int getLayoutId() { return R.layout.item_memo; } @Override protected void onBind(BaseViewHolder holder, int position) { MemoBean item = getItem(position); holder.getBinding().setBean(item); if (!expendMap.containsKey(getItem(position))){ expendMap.put(getItem(position),false); } if (Boolean.TRUE.equals(expendMap.get(getItem(position)))){ holder.getBinding().ivFold.setBackgroundResource(R.drawable.ic_unfold); holder.getBinding().cardView.post(() -> { holder.getBinding().cardView.getLayoutParams().height = FrameLayout.LayoutParams.WRAP_CONTENT; holder.getBinding().cardView.requestLayout(); }); }else{ holder.getBinding().ivFold.setBackgroundResource(R.drawable.ic_fold); holder.getBinding().cardView.post(() -> { holder.getBinding().cardView.getLayoutParams().height = holder.getBinding().layoutTitle.getMeasuredHeight(); holder.getBinding().cardView.requestLayout(); }); } holder.getBinding().layoutTitle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (Boolean.TRUE.equals(expendMap.get(getItem(position)))){ int initialHeight = holder.getBinding().cardView.getMeasuredHeight(); int collapsedHeight = holder.getBinding().layoutTitle.getMeasuredHeight(); Utils.pullCollapse(holder.getBinding().cardView,initialHeight,collapsedHeight); holder.getBinding().ivFold.setBackgroundResource(R.drawable.ic_fold); expendMap.put(getItem(position),false); }else{ final int initialHeight = holder.getBinding().cardView.getMeasuredHeight(); holder.getBinding().etContent.setText(item.getContent()); int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.EXACTLY); int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); holder.getBinding().cardView.measure(widthMeasureSpec, heightMeasureSpec); int targetHeight = holder.getBinding().cardView.getMeasuredHeight(); Utils.dropExpand(holder.getBinding().cardView,initialHeight,targetHeight); holder.getBinding().ivFold.setBackgroundResource(R.drawable.ic_unfold); expendMap.put(getItem(position),true); } } }); if (isEdited) { holder.getBinding().ivDelete.setVisibility(View.VISIBLE); holder.getBinding().etContent.setEnabled(true); holder.getBinding().viewLine.setVisibility(View.VISIBLE); holder.getBinding().tvDate.setClickable(true); holder.getBinding().ivDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new UIDialog.Builder(mContext) .setTitle("您确定要删除项目吗") .setContent("项目删除后将无法恢复") .setConfirm("确定") .setCancel("取消") .setListener(new UIDialog.OnListener() { @Override public void onConfirm(BaseDialog dialog) { removeItem(item); if (deleteList == null) { deleteList = new ArrayList<>(); } deleteList.add(item); } }) .show(); } }); holder.getBinding().tvDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { DatePicker datePicker = getDatePicker(); datePicker.setOnDatePickedListener(new OnDatePickedListener() { @Override public void onDatePicked(int year, int month, int day) { holder.getBinding().tvDate.setText(String.format(Locale.CHINA,"%d-%02d-%02d", year, month, day)); } }); datePicker.show(); } }); } else { holder.getBinding().ivDelete.setVisibility(View.GONE); holder.getBinding().etContent.setEnabled(false); holder.getBinding().viewLine.setVisibility(View.GONE); holder.getBinding().tvDate.setClickable(false); } } @Override protected BaseViewHolder getViewHolder(ItemMemoBinding itemBind, int viewType) { return new BaseViewHolder(itemBind); } public void setFold(boolean isFold,int position){ expendMap.put(getItem(position),isFold); notifyItemChanged(position); } public List getDeleteList() { return deleteList; } public List getAddList() { return addList; } public List getUpdateList() { return updateList; } public void setEdited(boolean edited) { isEdited = edited; notifyDataSetChanged(); } @Override public void addItem(int position, @NonNull MemoBean item) { super.addItem(position, item); if (addList == null) { addList = new ArrayList<>(); } addList.add(item); } @Override public void setData(@Nullable List data) { super.setData(data); for (MemoBean datum : data) { if (updateList == null) { updateList = new ArrayList<>(); } updateList.add(datum); } } private DatePicker getDatePicker(){ com.github.gzuliyujiang.wheelpicker.DatePicker datePicker = new DatePicker((Activity) mContext); DateWheelLayout wheelLayout = datePicker.getWheelLayout(); wheelLayout.getMonthWheelView().setCurtainCorner(0);//背景无圆角 wheelLayout.getDayWheelView().setCurtainCorner(5);//背景右边有圆角 wheelLayout.getYearWheelView().setCurtainCorner(4);//背景左边有圆角 wheelLayout.setDateFormatter(new UnitDateFormatter()); wheelLayout.setPadding(50, 0, 50, 0); wheelLayout.setItemSpace(ScreenSizeUtils.dip2px(mContext, 20)); wheelLayout.setCurtainEnabled(true); wheelLayout.setCurtainColor(Color.parseColor("#4D2F63F8")); wheelLayout.setCurtainRadius(ScreenSizeUtils.dip2px(mContext,4)); wheelLayout.setSelectedTextColor(Color.parseColor("#FF2F63F8")); wheelLayout.setTextColor(Color.parseColor("#FF999999")); wheelLayout.setIndicatorEnabled(false); //日期可选范围 wheelLayout.setRange(DateEntity.target(1900, 1, 1), DateEntity.target(2500, 12, 31),DateEntity.target(Calendar.getInstance())); datePicker.getWheelLayout().setResetWhenLinkage(false); return datePicker; } }