From 82e57df230ecb744af6c8865f80870ba03c86d89 Mon Sep 17 00:00:00 2001 From: Linjiajia <319408893@qq.com> Date: 星期二, 25 七月 2023 22:18:27 +0800 Subject: [PATCH] 基本功能完成 --- app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismDetailActivity.java | 277 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 248 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismDetailActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismDetailActivity.java index 73e398f..f5f11a6 100644 --- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismDetailActivity.java +++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismDetailActivity.java @@ -1,26 +1,40 @@ package com.application.zhangshi_app_android.ui.function; + +import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; +import android.widget.PopupWindow; -import androidx.recyclerview.widget.GridLayoutManager; - +import com.android.app_base.base.BaseConfig; +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.android.app_base.utils.rxbus.MessageEvent; +import com.android.app_base.utils.rxbus.RxBus; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.DailyConsumeRecordRvAdapter; -import com.application.zhangshi_app_android.adapter.ImageRvAdapter; -import com.application.zhangshi_app_android.bean.PrivacyBean; +import com.application.zhangshi_app_android.bean.ConsumeRecordBean; +import com.application.zhangshi_app_android.bean.DailyConsumeRecordBean; import com.application.zhangshi_app_android.bean.TourismBean; -import com.application.zhangshi_app_android.databinding.ActivityPrivacyDetailBinding; import com.application.zhangshi_app_android.databinding.ActivityTourismDetailBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; +import com.github.gzuliyujiang.wheelpicker.DatePicker; +import com.github.gzuliyujiang.wheelpicker.annotation.DateMode; +import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; +import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Calendar; +import java.util.HashSet; import java.util.List; +import java.util.Set; + +import io.reactivex.functions.Consumer; /** * @author Ljj @@ -28,7 +42,8 @@ * @desc */ public class TourismDetailActivity extends DLBaseActivity<ActivityTourismDetailBinding,TourismDetailActivityViewModel> { - + private int type;// 0 鏌ョ湅鍙慨鏀瑰垹闄� 1 鏂板 2 鐩存帴淇敼 + private PopupWindow popupWindow; private DailyConsumeRecordRvAdapter adapter; @Override @@ -43,19 +58,135 @@ @Override public void initParam() { - if (getIntent().hasExtra("bean")){ - viewModel.getBeanLiveData().setValue((TourismBean) getIntent().getSerializableExtra("bean")); + type = getIntent().getIntExtra(BaseConfig.EXTRA_TYPE,0); + if (type == 0 || type == 2){ + TourismBean bean = (TourismBean) getIntent().getSerializableExtra("bean"); + if (bean != null){ + viewModel.getBeanLiveData().setValue(bean); + } } } @Override public void initView() { - adapter = new DailyConsumeRecordRvAdapter(this); + adapter = new DailyConsumeRecordRvAdapter(this,viewModel); LinearItemDecoration itemDecoration = new LinearItemDecoration(); itemDecoration.setBottomSpace(ScreenSizeUtils.dip2px(this,20)); binding.rvDailyConsumeRecord.addItemDecoration(itemDecoration); binding.rvDailyConsumeRecord.setNestedScrollingEnabled(false); - setIsEdited(false); + binding.rvDailyConsumeRecord.setAdapter(adapter); + + if (type == 1){ + viewModel.getTypeLiveData().setValue(true); + binding.titleBar.setTitle("鏂板鏃呮父璐圭敤璁板綍"); + }else if (type == 0){ + popupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_operate_delete,null)); + popupWindow.getContentView().findViewById(R.id.tv_modify).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewModel.getTypeLiveData().setValue(true); + popupWindow.dismiss(); + } + }); + popupWindow.getContentView().findViewById(R.id.tv_delete).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + popupWindow.dismiss(); + new UIDialog.Builder(getSelfActivity()) + .setTitle("鎮ㄧ‘瀹氳鍒犻櫎椤圭洰鍚�") + .setContent("椤圭洰鍒犻櫎鍚庡皢鏃犳硶鎭㈠") + .setConfirm("纭畾") + .setCancel("鍙栨秷") + .setListener(new UIDialog.OnListener() { + @Override + public void onConfirm(BaseDialog dialog) { + viewModel.delete(); + } + }) + .show(); + } + }); + viewModel.getTypeLiveData().setValue(false); + }else if (type == 2){ + viewModel.getTypeLiveData().setValue(true); + } + + binding.etStartTime.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DatePicker datePicker = getDatePicker(); + datePicker.setTitle("閫夋嫨寮�濮嬫椂闂�"); + datePicker.setOnDatePickedListener(new OnDatePickedListener() { + @Override + public void onDatePicked(int year, int month, int day) { + //浠yyy-MM-dd鐨勬牸寮忔樉绀猴紝鏈堟棩灏忎簬10鏃跺墠闈㈣ˉ0 + binding.etStartTime.setText(String.format("%d-%02d-%02d", year, month, day)); + String startTime = binding.etStartTime.getText().toString(); + String endTime = binding.etEndTime.getText().toString(); + if (TextUtils.isEmpty(endTime)){ + binding.etEndTime.setText(String.format("%d-%02d-%02d", year, month, day)); + endTime = binding.etEndTime.getText().toString(); + }else { + //姣旇緝寮�濮嬫椂闂村拰缁撴潫鏃堕棿鐨勫ぇ灏� + if (Utils.compareDate(startTime,endTime) > 0){ + //浜ゆ崲 + binding.etStartTime.setText(endTime); + binding.etEndTime.setText(startTime); + } + } + binding.etStartTime.clearFocus(); + } + }); + datePicker.show(); + } + }); + binding.etEndTime.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DatePicker datePicker = getDatePicker(); + datePicker.setTitle("閫夋嫨缁撴潫鏃堕棿"); + datePicker.setOnDatePickedListener(new OnDatePickedListener() { + @Override + public void onDatePicked(int year, int month, int day) { + binding.etEndTime.setText(String.format("%d-%02d-%02d", year, month , day)); + String startTime = binding.etStartTime.getText().toString(); + String endTime = binding.etEndTime.getText().toString(); + if (TextUtils.isEmpty(startTime)){ + binding.etStartTime.setText(String.format("%d-%02d-%02d", year, month, day)); + startTime = binding.etStartTime.getText().toString(); + }else { + //姣旇緝寮�濮嬫椂闂村拰缁撴潫鏃堕棿鐨勫ぇ灏� + if (Utils.compareDate(startTime,endTime) > 0){ + //浜ゆ崲 + binding.etStartTime.setText(endTime); + binding.etEndTime.setText(startTime); + } + } + binding.etEndTime.clearFocus(); + } + }); + datePicker.show(); + + } + }); + binding.ivAddDailyConsumeRecord.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DatePicker datePicker = getDatePicker(); + datePicker.setTitle("閫夋嫨娑堣垂鏃ユ湡"); + datePicker.getWheelLayout().setDateMode(DateMode.MONTH_DAY); + datePicker.setOnDatePickedListener(new OnDatePickedListener() { + @Override + public void onDatePicked(int year, int month, int day) { + DailyConsumeRecordBean dailyConsumeRecordBean = new DailyConsumeRecordBean(); + dailyConsumeRecordBean.setDate(month+"鏈�"+day+"鏃�"); + adapter.addItem(0,dailyConsumeRecordBean); + adapter.setFold(true,0); + } + }); + datePicker.show(); + } + }); } @Override @@ -67,27 +198,115 @@ public void initLiveDataObserve() { viewModel.getBeanLiveData().observe(this,bean -> { if (bean!=null){ - adapter.setData(bean.getDailyConsumeRecordBeans()); + if (bean.getDetailList()==null){ + return; + } + //鏍规嵁鏃堕棿鍒嗙粍 + Set<String> set = new HashSet<>(); + for (ConsumeRecordBean consumeRecordBean : bean.getDetailList()) { + set.add(consumeRecordBean.getHappenTime()); + } + List<DailyConsumeRecordBean> list = new ArrayList<>(); + for (String s : set) { + DailyConsumeRecordBean dailyConsumeRecordBean = new DailyConsumeRecordBean(); + dailyConsumeRecordBean.setDate(s); + List<ConsumeRecordBean> consumeRecordBeans = new ArrayList<>(); + for (ConsumeRecordBean consumeRecordBean : bean.getDetailList()) { + if (s.equals(consumeRecordBean.getHappenTime())){ + consumeRecordBeans.add(consumeRecordBean); + dailyConsumeRecordBean.setDailyMoney(consumeRecordBean.getDayCost()); + } + } + dailyConsumeRecordBean.setConsumeRecordBeans(consumeRecordBeans); + list.add(dailyConsumeRecordBean); + } + adapter.setData(list); } }); - } - - public void setIsEdited(boolean isEdited){ - disableAllEditText(getContentView(),isEdited); - } - public void disableAllEditText(ViewGroup viewGroup, boolean isEdited) { - for (int i = 0; i < viewGroup.getChildCount(); i++) { - View child = viewGroup.getChildAt(i); - if (child instanceof ViewGroup) { - disableAllEditText((ViewGroup) child,isEdited); - } else if (child instanceof EditText) { - child.setEnabled(isEdited); - child.setFocusable(isEdited); - child.setFocusableInTouchMode(isEdited); - if (!isEdited){ - child.clearFocus(); + viewModel.getTypeLiveData().observe(this,operateType -> { + if (operateType){ + if (type == 1) { + binding.ivOperate.setOnClickListener(v -> { + if (adapter.getData() != null){ + List<ConsumeRecordBean> list = new ArrayList<>(); + for (DailyConsumeRecordBean bean : adapter.getData()) { + if (bean.getConsumeRecordBeans() != null){ + for (ConsumeRecordBean consumeRecordBean : bean.getConsumeRecordBeans()) { + consumeRecordBean.setHappenTime(bean.getDate()); + } + list.addAll(bean.getConsumeRecordBeans()); + } + } + if (viewModel.getBeanLiveData().getValue() == null){ + return; + } + viewModel.getBeanLiveData().getValue().setDetailList(list); + } + viewModel.add(); + }); + }else { + binding.ivOperate.setOnClickListener(v -> { + if (adapter.getData() != null){ + List<ConsumeRecordBean> list = new ArrayList<>(); + for (DailyConsumeRecordBean bean : adapter.getData()) { + if (bean.getConsumeRecordBeans() != null){ + for (ConsumeRecordBean consumeRecordBean : bean.getConsumeRecordBeans()) { + consumeRecordBean.setHappenTime(bean.getDate()); + } + list.addAll(bean.getConsumeRecordBeans()); + } + } + if (viewModel.getBeanLiveData().getValue() == null){ + return; + } + viewModel.getBeanLiveData().getValue().setDetailList(list); + } + viewModel.update(); + }); } + }else { + binding.ivOperate.setOnClickListener(v -> { + popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0); + }); } - } + }); + RxBus.getInstance().toObservable(this, MessageEvent.class) + .subscribe(messageEvent -> { + if (messageEvent.getMessageEventCode() == MessageEvent.EVENT_TOURISM_CONSUME_CHANGE){ + if (adapter.getItemCount() == 0 || adapter.getData() == null){ + binding.etTotalCost.setText("0"); + binding.etTotalCost1.setText("0"); + binding.etTraffic.setText("0"); + binding.etStay.setText("0"); + binding.etShopping.setText("0"); + binding.etEntrance.setText("0"); + binding.etEat.setText("0"); + return; + } + Set<String> dateSet = new HashSet<>(); + double totalCost = 0,traffic = 0,stay = 0,shopping = 0,entrance = 0,eat = 0; + for (DailyConsumeRecordBean dailyConsumeRecordBean : adapter.getData()) { + dateSet.add(dailyConsumeRecordBean.getDate()); + totalCost += dailyConsumeRecordBean.getDailyMoney(); + if (dailyConsumeRecordBean.getConsumeRecordBeans() != null){ + for (ConsumeRecordBean consumeRecordBean : dailyConsumeRecordBean.getConsumeRecordBeans()){ + traffic += consumeRecordBean.getTraffic(); + stay += consumeRecordBean.getStay(); + shopping += consumeRecordBean.getShopping(); + entrance += consumeRecordBean.getEntrance(); + eat += consumeRecordBean.getEat(); + } + } + } + binding.etTotalCost.setText(BigDecimal.valueOf(totalCost).stripTrailingZeros().toPlainString()); + binding.etTotalCost1.setText(BigDecimal.valueOf(totalCost).stripTrailingZeros().toPlainString()); + binding.etTraffic.setText(BigDecimal.valueOf(traffic).stripTrailingZeros().toPlainString()); + binding.etStay.setText(BigDecimal.valueOf(stay).stripTrailingZeros().toPlainString()); + binding.etShopping.setText(BigDecimal.valueOf(shopping).stripTrailingZeros().toPlainString()); + binding.etEntrance.setText(BigDecimal.valueOf(entrance).stripTrailingZeros().toPlainString()); + binding.etEat.setText(BigDecimal.valueOf(eat).stripTrailingZeros().toPlainString()); + binding.etTotalDay.setText(dateSet.size()+""); + } + }); } } -- Gitblit v1.9.1