新增排程页面重做

This commit is contained in:
fengjignqi
2026-05-22 15:05:27 +08:00
parent 1b7c8f0c2d
commit f86fedd6f1
17 changed files with 805 additions and 555 deletions

View File

@@ -11,6 +11,8 @@ import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
@@ -20,6 +22,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -30,6 +33,7 @@ import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.viewbinding.ViewBinding;
import com.ckkj.water.utils.show.ToastUtil;
import com.esafirm.imagepicker.features.ImagePicker;
import com.ckkj.water.AppConfig;
import com.ckkj.water.ConstantUtil;
@@ -70,6 +74,12 @@ public abstract class BaseFragment<T extends ViewBinding,P extends IPresenter> e
protected static final int REQUEST_EVENT_CODE_10002 = 10002;
protected static final int REQUEST_EVENT_CODE_10003 = 10003;
public static final int INPUT_TYPE_NORMAL = 0; // 默认
public static final int INPUT_TYPE_NUMBER = 1; // 数字
public static final int INPUT_TYPE_LETTER = 2; // 英文字母
public static final int INPUT_TYPE_CHINESE = 3; // 中文
public static final int INPUT_TYPE_NUMBER_LETTER = 4;//数字+字母
private static final AtomicBoolean isDialogShown = new AtomicBoolean(false); // 使用 AtomicBoolean 保证线程安全
@@ -860,6 +870,193 @@ public abstract class BaseFragment<T extends ViewBinding,P extends IPresenter> e
});
}
/**
* +
*
* @param title 标题
* @param hint 提示内容2
* @param content 内容
* @param touchOutsideCancel 弹窗类型
* @param cancelText 取消 文案
* @param confirmText 确定 文案
* @param click
*/
public void showEditDialog(String title,
String hint,
String content,
boolean touchOutsideCancel,
String cancelText,
String confirmText,
int inputType,
final BaseActivity.OnDialogClick click) {
View view = getLayoutInflater().inflate(
R.layout.public_dialog_input_text,
null
);
EditText editText = view.findViewById(R.id.et_input);
//设置输入类型
setEditInputType(editText,inputType);
if(TextUtils.isEmpty(content)){
editText.setHint(hint);
}else{
editText.setText(content);
editText.setSelection(content.length());
}
setTextView(R.id.tv_title,title,view);
if (!TextUtils.isEmpty(confirmText)
&& !TextUtils.isEmpty(cancelText)) {
((TextView)view.findViewById(R.id.btnLeft))
.setText(cancelText);
((TextView)view.findViewById(R.id.btnRight))
.setText(confirmText);
}
view.findViewById(R.id.btnLeft)
.setOnClickListener(v -> {
if(dialog!=null&&dialog.isShowing())
dialog.dismiss();
if(click!=null)
click.onCancelClick();
});
view.findViewById(R.id.btnRight)
.setOnClickListener(v -> {
String value=editText.getText()
.toString()
.trim();
if(TextUtils.isEmpty(value)){
ToastUtil.showShort(mContext,hint);
return;
}
if(dialog!=null&&dialog.isShowing())
dialog.dismiss();
if(click!=null)
click.onConfirmClisk(value);
});
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
builder = new AlertDialog.Builder(
mContext,
AlertDialog.THEME_HOLO_LIGHT
);
} else {
builder = new AlertDialog.Builder(mContext);
}
builder.setInverseBackgroundForced(true);
builder.setView(view);
dialog = builder.show();
dialog.setCanceledOnTouchOutside(
touchOutsideCancel
);
try {
((View)dialog.getWindow()
.getDecorView()
.findViewById(R.id.contentDialog)
.getParent()
.getParent())
.setBackgroundColor(
getResources().getColor(
R.color.transparent
)
);
} catch (Exception e) {
e.printStackTrace();
}
}
private void setEditInputType(EditText editText,int type){
switch (type){
case INPUT_TYPE_NUMBER:
//纯数字键盘
editText.setInputType(
InputType.TYPE_CLASS_NUMBER
);
break;
case INPUT_TYPE_LETTER:
//只能输入字母
editText.setFilters(
new InputFilter[]{
(source,start,end,dest,dstart,dend)->{
if(source.toString()
.matches("[a-zA-Z]+")){
return source;
}
return "";
}
});
break;
case INPUT_TYPE_CHINESE:
//只能输入中文
editText.setFilters(
new InputFilter[]{
(source,start,end,dest,dstart,dend)->{
if(source.toString()
.matches("[\\u4e00-\\u9fa5]+")){
return source;
}
return "";
}
});
break;
case INPUT_TYPE_NUMBER_LETTER:
//数字+字母
editText.setFilters(
new InputFilter[]{
(source,start,end,dest,dstart,dend)->{
if(source.toString()
.matches("[a-zA-Z0-9]+")){
return source;
}
return "";
}
});
break;
default:
editText.setInputType(
InputType.TYPE_CLASS_TEXT
);
break;
}
}
/**
* 权限请求结果回调
*/

View File

@@ -26,15 +26,15 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
implements WaterPlanContract.WaterPlanView {
private List<Fragment> mFragmentList = new ArrayList<>();
private List<WaterPlanWeekEntity.DeviceEntity> mSelectedDevices = new ArrayList<>();
public List<WaterPlanWeekEntity.DeviceEntity> getSelectedDevices() {
return mSelectedDevices;
}
public void setSelectedDevices(List<WaterPlanWeekEntity.DeviceEntity> selectedDevices) {
this.mSelectedDevices = selectedDevices;
}
// private List<WaterPlanWeekEntity.DeviceEntity> mSelectedDevices = new ArrayList<>();
//
// public List<WaterPlanWeekEntity.DeviceEntity> getSelectedDevices() {
// return mSelectedDevices;
// }
//
// public void setSelectedDevices(List<WaterPlanWeekEntity.DeviceEntity> selectedDevices) {
// this.mSelectedDevices = selectedDevices;
// }
@Override
public WaterPlanPresenter createPresenter() {

View File

@@ -11,7 +11,7 @@ import com.ckkj.water.base.BaseFragment;
import com.ckkj.water.databinding.PlanBindDeviceLayoutBinding;
import com.ckkj.water.main.activity.MainActivity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.plan.adapter.BindDeviceAdapter;
//import com.ckkj.water.plan.adapter.BindDeviceAdapter;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import com.ckkj.water.plan.mvp.WaterPlanContract;
import com.ckkj.water.plan.mvp.WaterPlanImpl;
@@ -29,35 +29,35 @@ public class BindDeviceFragment extends BaseFragment<PlanBindDeviceLayoutBinding
implements WaterPlanContract.WaterPlanView {
private List<WaterPlanWeekEntity> weekList = new ArrayList<>();
private BindDeviceAdapter mAdapter;
// private BindDeviceAdapter mAdapter;
@Override
public void initData(Bundle state) {
String jsonContent = getString(R.string.plan_water_entity_json);
WaterPlanWeekEntity entity = new Gson().fromJson(jsonContent, WaterPlanWeekEntity.class);
weekList.add(entity);
mAdapter = new BindDeviceAdapter(mContext,R.layout.plan_bind_device_item,weekList.get(0).getDeviceList());
viewBinding.rvDevices.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
mAdapter.toggleSelection(position);
syncSelectedDevices();
}
});
// mAdapter = new BindDeviceAdapter(mContext,R.layout.plan_bind_device_item,weekList.get(0).getDeviceList());
// viewBinding.rvDevices.setAdapter(mAdapter);
// mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
// @Override
// public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
// mAdapter.toggleSelection(position);
// syncSelectedDevices();
// }
// });
}
private void syncSelectedDevices() {
Set<Integer> selectedPositions = mAdapter.getSelectedPositions();
List<WaterPlanWeekEntity.DeviceEntity> selected = new ArrayList<>();
for (int pos : selectedPositions) {
if (pos >= 0 && pos < weekList.get(0).getDeviceList().size()) {
selected.add(weekList.get(0).getDeviceList().get(pos));
}
}
if (getActivity() instanceof AddWaterPlanActivity) {
((AddWaterPlanActivity) getActivity()).setSelectedDevices(selected);
}
// Set<Integer> selectedPositions = mAdapter.getSelectedPositions();
// List<WaterPlanWeekEntity.DeviceEntity> selected = new ArrayList<>();
// for (int pos : selectedPositions) {
// if (pos >= 0 && pos < weekList.get(0).getDeviceList().size()) {
// selected.add(weekList.get(0).getDeviceList().get(pos));
// }
// }
// if (getActivity() instanceof AddWaterPlanActivity) {
// ((AddWaterPlanActivity) getActivity()).setSelectedDevices(selected);
// }
}
@Override

View File

@@ -7,8 +7,8 @@ import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.databinding.WaterPlanDetailLayoutBinding;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.plan.adapter.PlanDetailDeviceAdapter;
import com.ckkj.water.plan.adapter.PlanDetailTimeAdapter;
//import com.ckkj.water.plan.adapter.PlanDetailDeviceAdapter;
//import com.ckkj.water.plan.adapter.PlanDetailTimeAdapter;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import com.ckkj.water.plan.mvp.WaterPlanContract;
import com.ckkj.water.plan.mvp.WaterPlanImpl;
@@ -35,10 +35,10 @@ public class PlanDetailActivity extends BaseActivity<WaterPlanDetailLayoutBindin
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.plan_detail_title);
initListener();
PlanDetailTimeAdapter timeAdapter = new PlanDetailTimeAdapter(R.layout.plan_detail_time_item,entity.getWashCycleList());
viewBinding.rvPlanTime.setAdapter(timeAdapter);
PlanDetailDeviceAdapter deviceAdapter = new PlanDetailDeviceAdapter(R.layout.plan_detail_bind_device_item,entity.getDeviceList());
viewBinding.rvBindDevices.setAdapter(deviceAdapter);
// PlanDetailTimeAdapter timeAdapter = new PlanDetailTimeAdapter(R.layout.plan_detail_time_item,entity.getWashCycleList());
// viewBinding.rvPlanTime.setAdapter(timeAdapter);
// PlanDetailDeviceAdapter deviceAdapter = new PlanDetailDeviceAdapter(R.layout.plan_detail_bind_device_item,entity.getDeviceList());
// viewBinding.rvBindDevices.setAdapter(deviceAdapter);
}
private void initListener() {

View File

@@ -11,6 +11,7 @@ import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.TimePickerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.base.BaseFragment;
import com.ckkj.water.databinding.WaterConfigFragmentLayoutBinding;
import com.ckkj.water.network.BaseBean;
@@ -19,6 +20,8 @@ import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import com.ckkj.water.plan.mvp.WaterPlanContract;
import com.ckkj.water.plan.mvp.WaterPlanImpl;
import com.ckkj.water.plan.mvp.WaterPlanPresenter;
import com.ckkj.water.utils.show.ToastUtil;
import com.ckkj.water.utils.text.TextUtil;
import com.ckkj.water.utils.time.ZYTimeUtils;
import com.google.gson.Gson;
@@ -28,68 +31,108 @@ import java.util.List;
public class WaterConfigFragment extends BaseFragment<WaterConfigFragmentLayoutBinding, WaterPlanPresenter>
implements WaterPlanContract.WaterPlanView {
private List<WaterPlanWeekEntity> weekList = new ArrayList<>();
private List<WaterPlanWeekEntity.DetailsBean> mConfigList = new ArrayList<>();
private WaterPlanWeekEntity mConfigEntity;
private WaterPlanWeekAdapter mWeekAdapter;
@Override
public void initData(Bundle state) {
String jsonContent = getString(R.string.plan_water_entity_json);
WaterPlanWeekEntity entity = new Gson().fromJson(jsonContent, WaterPlanWeekEntity.class);
weekList.add(entity);
mWeekAdapter = new WaterPlanWeekAdapter(mContext, R.layout.plan_period_item,weekList.get(0).getWashCycleList());
viewBinding.rvWeek.setAdapter(mWeekAdapter);
mConfigEntity = new WaterPlanWeekEntity();
List<WaterPlanWeekEntity.DetailsBean> list = new ArrayList<>();
for(int i = 0; i < 7; i++){
WaterPlanWeekEntity.DetailsBean bean = new WaterPlanWeekEntity.DetailsBean();
bean.setWeekday(i);
bean.setStatus("0");
bean.setWeekName(ZYTimeUtils.getWeekName(i));
list.add(bean);
}
mConfigEntity.setDetails(list);
mWeekAdapter = new WaterPlanWeekAdapter(mContext,R.layout.plan_week_config_item, mConfigEntity.getDetails());
viewBinding.rvWeekConfig.setAdapter(mWeekAdapter);
initListener();
}
private void initListener() {
setClick(viewBinding.tvCommit);
setClick(viewBinding.tvSelectTime);
viewBinding.etPlanTime.addTextChangedListener(new TextWatcher() {
//
mWeekAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
switch (view.getId()){
case R.id.linear_week://选中
case R.id.checkbox:
if(mConfigEntity.getDetails().get(position).getStatus().equals("1")){
mConfigEntity.getDetails().get(position).setStatus("0");
}else{
mConfigEntity.getDetails().get(position).setStatus("1");
}
mWeekAdapter.notifyItemChanged(position);
break;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
case R.id.tv_select_time:
selectStartTime(position);
break;
@Override
public void afterTextChanged(Editable s) {
if(weekList != null){
String time = s.toString();
if(TextUtils.isEmpty(time)){
weekList.get(0).getWashCycleList().get(mWeekAdapter.getmPos()).setDuration("");
}else{
weekList.get(0).getWashCycleList().get(mWeekAdapter.getmPos()).setDuration(time);
case R.id.tv_plan_duration:
inputDuration(position);
break;
}
}
});
}
private void inputDuration(int position) {
showEditDialog(getString(R.string.device_work_times_title),
getString(R.string.input_water_plan_time),
mConfigEntity.getDetails().get(position).getDurationMin() == 0 ?
"" : mConfigEntity.getDetails().get(position).getDurationMin() + "",
true,
getString(R.string.cancel_text),
getString(R.string.confirm_text),
BaseFragment.INPUT_TYPE_NUMBER,
new BaseActivity.OnDialogClick() {
@Override
public void onCancelClick() {
}
}
}
});
mWeekAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onConfirmClisk() {
}
@Override
public void onConfirmClisk(String content) {
if(Integer.parseInt(content) <= 0){
ToastUtil.showShort(mContext, getString(R.string.input_water_plan_time_error));
return;
}
mConfigEntity.getDetails().get(position).setDurationMin(Integer.parseInt(content));
mWeekAdapter.notifyItemChanged(position);
}
@Override
public void onView1Click() {
}
});
}
private void selectStartTime(int position) {
boolean times[] = {false, false, false, true, true, false};
//时间选择器
TimePickerView pvTime = new TimePickerBuilder(mContext, new OnTimeSelectListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
mWeekAdapter.setSelPos(position);
String planStartTime = weekList.get(0).getWashCycleList().get(position).getTime();
String planTime = weekList.get(0).getWashCycleList().get(position).getDuration();
if(TextUtils.isEmpty(planStartTime)){
viewBinding.tvSelectTime.setHint(getString(R.string.select_water_time));
viewBinding.tvSelectTime.setText("");
}else{
viewBinding.tvSelectTime.setText(planStartTime);
}
if(TextUtils.isEmpty(planTime)){
viewBinding.etPlanTime.setHint(getString(R.string.input_water_plan_time));
viewBinding.etPlanTime.setText("");
}else{
viewBinding.etPlanTime.setText(planTime);
}
public void onTimeSelect(Date date, View v) {
mConfigEntity.getDetails().get(position).setStartTime(ZYTimeUtils.getStrTimeData_H_M(date));
mWeekAdapter.notifyItemChanged(position);
}
});
}).setType(times)
.setCancelColor(mContext.getColor(R.color.color_999999))
.setSubmitColor(mContext.getColor(R.color.color_zhu))
.setTextColorCenter(mContext.getColor(R.color.color_zhu))
.build();
pvTime.show();
}
private void setClick(View view) {
@@ -99,42 +142,50 @@ public class WaterConfigFragment extends BaseFragment<WaterConfigFragmentLayoutB
public void onClick(View v){
switch (v.getId()){
case R.id.tv_select_time:
boolean times[] = {false, false, false, true, true, false};
//时间选择器
TimePickerView pvTime = new TimePickerBuilder(mContext, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
viewBinding.tvSelectTime.setText(ZYTimeUtils.getStrTimeData_H_M(date));
if(weekList != null){
String startTime = ZYTimeUtils.getStrTimeData_H_M(date).trim();
weekList.get(0).getWashCycleList().get(mWeekAdapter.getmPos()).setTime(startTime);
}
}
}).setType(times)
.setCancelColor(mContext.getColor(R.color.color_999999))
.setSubmitColor(mContext.getColor(R.color.color_zhu))
.setTextColorCenter(mContext.getColor(R.color.color_zhu))
.build();
pvTime.show();
break;
case R.id.tv_commit:
List<WaterPlanWeekEntity.DeviceEntity> list = getSelectedDevices();
if(list != null){
if(checkConfigFinish()){
ToastUtil.showShort(mContext,"提交");
}
break;
}
}
private List<WaterPlanWeekEntity.DeviceEntity> getSelectedDevices() {
if (getActivity() instanceof AddWaterPlanActivity) {
return ((AddWaterPlanActivity) getActivity()).getSelectedDevices();
private boolean checkConfigFinish() {
if(TextUtils.isEmpty(viewBinding.etPlanName.getText().toString())){
ToastUtil.showShort(mContext,getString(R.string.plan_name_text_empty_hint));
return false;
}
return new ArrayList<>();
List<WaterPlanWeekEntity.DetailsBean> list = mConfigEntity.getDetails();
//是否勾选了排程日期
boolean isSelectOne = false;
if(list != null){
for(WaterPlanWeekEntity.DetailsBean bean : list){
if(bean.getStatus().equals("1")){
isSelectOne = true;
}
}
}
if(!isSelectOne){
ToastUtil.showShort(mContext,getString(R.string.plan_week_empty_hint));
return false;
}
//是否配置了排程日期的时间
boolean isPlanConfig = false;
for(WaterPlanWeekEntity.DetailsBean bean : list){
if(bean.getStatus().equals("1")){
if((TextUtils.isEmpty(bean.getStartTime()) ||
bean.getDurationMin() == 0)){
ToastUtil.showShort(mContext,"请完成" + bean.getWeekName() + "的时间配置");
return false;
}
}
}
return true;
}
@Override
public WaterPlanPresenter createPresenter() {
return new WaterPlanPresenter(new WaterPlanImpl());

View File

@@ -11,7 +11,7 @@ import com.ckkj.water.base.BaseFragment;
import com.ckkj.water.databinding.WaterPlanFragmentBinding;
import com.ckkj.water.main.activity.MainActivity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.plan.adapter.WaterPlanListAdapter;
//import com.ckkj.water.plan.adapter.WaterPlanListAdapter;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import com.ckkj.water.plan.mvp.WaterPlanContract;
import com.ckkj.water.plan.mvp.WaterPlanImpl;
@@ -25,14 +25,14 @@ import java.util.List;
public class WaterPlanFragment extends BaseFragment<WaterPlanFragmentBinding, WaterPlanPresenter>
implements WaterPlanContract.WaterPlanView {
private List<WaterPlanWeekEntity.DeviceEntity> mDevList = new ArrayList<>();
private WaterPlanListAdapter mAdapter;
// private List<WaterPlanWeekEntity.DeviceEntity> mDevList = new ArrayList<>();
// private WaterPlanListAdapter mAdapter;
@Override
public void initData(Bundle state) {
String jsonContent = getString(R.string.plan_water_entity_json);
WaterPlanWeekEntity entity = new Gson().fromJson(jsonContent, WaterPlanWeekEntity.class);
mDevList = entity.getDeviceList();
// mDevList = entity.getDeviceList();
ImmersionBar.with(mContext)
.statusBarColor(R.color.mainBackgroundColor)
@@ -43,14 +43,14 @@ public class WaterPlanFragment extends BaseFragment<WaterPlanFragmentBinding, Wa
viewBinding.includedTitle.tvTitle.setText(getString(R.string.plan_title));
initListener();
mAdapter = new WaterPlanListAdapter(mContext,R.layout.water_plan_list_item,mDevList);
viewBinding.rvPlans.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
goTo(mContext, PlanDetailActivity.class,null);
}
});
// mAdapter = new WaterPlanListAdapter(mContext,R.layout.water_plan_list_item,mDevList);
// viewBinding.rvPlans.setAdapter(mAdapter);
// mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
// @Override
// public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
// goTo(mContext, PlanDetailActivity.class,null);
// }
// });
}

View File

@@ -1,55 +1,55 @@
package com.ckkj.water.plan.adapter;
import android.content.Context;
import android.widget.CheckBox;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ckkj.water.R;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class BindDeviceAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.DeviceEntity, BaseViewHolder> {
private Context mContext;
private Set<Integer> mSelectedPositions = new HashSet<>();
public BindDeviceAdapter(Context context, int layoutResId, @Nullable List<WaterPlanWeekEntity.DeviceEntity> data) {
super(layoutResId, data);
this.mContext = context;
}
@Override
protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DeviceEntity item) {
CheckBox checkBox = helper.getView(R.id.radio);
helper.setText(R.id.tv_device_name, item.getDeviceName());
helper.setText(R.id.tv_device_serial, item.getDeviceCode());
checkBox.setChecked(mSelectedPositions.contains(helper.getLayoutPosition()));
}
public void toggleSelection(int position) {
if (mSelectedPositions.contains(position)) {
mSelectedPositions.remove(position);
} else {
mSelectedPositions.add(position);
}
notifyDataSetChanged();
}
public void clearSelection() {
mSelectedPositions.clear();
notifyDataSetChanged();
}
public Set<Integer> getSelectedPositions() {
return new HashSet<>(mSelectedPositions);
}
public int getSelectedCount() {
return mSelectedPositions.size();
}
}
//package com.ckkj.water.plan.adapter;
//
//import android.content.Context;
//import android.widget.CheckBox;
//
//import androidx.annotation.Nullable;
//
//import com.chad.library.adapter.base.BaseQuickAdapter;
//import com.chad.library.adapter.base.BaseViewHolder;
//import com.ckkj.water.R;
//import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
//
//import java.util.HashSet;
//import java.util.List;
//import java.util.Set;
//
//public class BindDeviceAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.DeviceEntity, BaseViewHolder> {
// private Context mContext;
// private Set<Integer> mSelectedPositions = new HashSet<>();
//
// public BindDeviceAdapter(Context context, int layoutResId, @Nullable List<WaterPlanWeekEntity.DeviceEntity> data) {
// super(layoutResId, data);
// this.mContext = context;
// }
//
// @Override
// protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DeviceEntity item) {
// CheckBox checkBox = helper.getView(R.id.radio);
// helper.setText(R.id.tv_device_name, item.getDeviceName());
// helper.setText(R.id.tv_device_serial, item.getDeviceCode());
// checkBox.setChecked(mSelectedPositions.contains(helper.getLayoutPosition()));
// }
//
// public void toggleSelection(int position) {
// if (mSelectedPositions.contains(position)) {
// mSelectedPositions.remove(position);
// } else {
// mSelectedPositions.add(position);
// }
// notifyDataSetChanged();
// }
//
// public void clearSelection() {
// mSelectedPositions.clear();
// notifyDataSetChanged();
// }
//
// public Set<Integer> getSelectedPositions() {
// return new HashSet<>(mSelectedPositions);
// }
//
// public int getSelectedCount() {
// return mSelectedPositions.size();
// }
//}

View File

@@ -1,23 +1,23 @@
package com.ckkj.water.plan.adapter;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ckkj.water.R;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import java.util.List;
public class PlanDetailDeviceAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.DeviceEntity, BaseViewHolder> {
public PlanDetailDeviceAdapter(int layoutResId, @Nullable List<WaterPlanWeekEntity.DeviceEntity> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DeviceEntity item) {
helper.setText(R.id.tv_device_name,item.getDeviceName());
helper.setText(R.id.tv_device_serial,item.getDeviceCode());
}
}
//package com.ckkj.water.plan.adapter;
//
//import androidx.annotation.Nullable;
//
//import com.chad.library.adapter.base.BaseQuickAdapter;
//import com.chad.library.adapter.base.BaseViewHolder;
//import com.ckkj.water.R;
//import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
//
//import java.util.List;
//
//public class PlanDetailDeviceAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.DeviceEntity, BaseViewHolder> {
//
// public PlanDetailDeviceAdapter(int layoutResId, @Nullable List<WaterPlanWeekEntity.DeviceEntity> data) {
// super(layoutResId, data);
// }
//
// @Override
// protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DeviceEntity item) {
// helper.setText(R.id.tv_device_name,item.getDeviceName());
// helper.setText(R.id.tv_device_serial,item.getDeviceCode());
// }
//}

View File

@@ -1,24 +1,24 @@
package com.ckkj.water.plan.adapter;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ckkj.water.R;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import java.util.List;
public class PlanDetailTimeAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.WashCycleEntity, BaseViewHolder> {
public PlanDetailTimeAdapter(int layoutResId, @Nullable List<WaterPlanWeekEntity.WashCycleEntity> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.WashCycleEntity item) {
helper.setText(R.id.tv_week,item.getWeek());
helper.setText(R.id.tv_start_time,item.getTime());
helper.setText(R.id.tv_duration,item.getDuration());
}
}
//package com.ckkj.water.plan.adapter;
//
//import androidx.annotation.Nullable;
//
//import com.chad.library.adapter.base.BaseQuickAdapter;
//import com.chad.library.adapter.base.BaseViewHolder;
//import com.ckkj.water.R;
//import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
//
//import java.util.List;
//
//public class PlanDetailTimeAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.WashCycleEntity, BaseViewHolder> {
//
// public PlanDetailTimeAdapter(int layoutResId, @Nullable List<WaterPlanWeekEntity.WashCycleEntity> data) {
// super(layoutResId, data);
// }
//
// @Override
// protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.WashCycleEntity item) {
// helper.setText(R.id.tv_week,item.getWeek());
// helper.setText(R.id.tv_start_time,item.getTime());
// helper.setText(R.id.tv_duration,item.getDuration());
// }
//}

View File

@@ -1,33 +1,33 @@
package com.ckkj.water.plan.adapter;
import android.content.Context;
import android.widget.CheckBox;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ckkj.water.R;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class WaterPlanListAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.DeviceEntity, BaseViewHolder> {
private Context mContext;
public WaterPlanListAdapter(Context context, int layoutResId, @Nullable List<WaterPlanWeekEntity.DeviceEntity> data) {
super(layoutResId, data);
this.mContext = context;
}
@Override
protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DeviceEntity item) {
helper.setText(R.id.tv_device_name, item.getDeviceName());
helper.setText(R.id.tv_device_serial, item.getDeviceCode());
}
}
//package com.ckkj.water.plan.adapter;
//
//import android.content.Context;
//import android.widget.CheckBox;
//
//import androidx.annotation.Nullable;
//
//import com.chad.library.adapter.base.BaseQuickAdapter;
//import com.chad.library.adapter.base.BaseViewHolder;
//import com.ckkj.water.R;
//import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
//
//import java.util.HashSet;
//import java.util.List;
//import java.util.Set;
//
//public class WaterPlanListAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.DeviceEntity, BaseViewHolder> {
// private Context mContext;
//
// public WaterPlanListAdapter(Context context, int layoutResId, @Nullable List<WaterPlanWeekEntity.DeviceEntity> data) {
// super(layoutResId, data);
// this.mContext = context;
// }
//
// @Override
// protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DeviceEntity item) {
// helper.setText(R.id.tv_device_name, item.getDeviceName());
// helper.setText(R.id.tv_device_serial, item.getDeviceCode());
// }
//
//
//
//}

View File

@@ -7,7 +7,9 @@ import static android.view.View.VISIBLE;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
@@ -19,36 +21,66 @@ import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import java.util.ArrayList;
import java.util.List;
public class WaterPlanWeekAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.WashCycleEntity, BaseViewHolder> {
private List<WaterPlanWeekEntity.WashCycleEntity> mList = new ArrayList<>();
public class WaterPlanWeekAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.DetailsBean, BaseViewHolder> {
private List<WaterPlanWeekEntity.DetailsBean> mList = new ArrayList<>();
private Context mContext;
private int mPos = 0;
public WaterPlanWeekAdapter(Context context,int layoutResId, @Nullable List<WaterPlanWeekEntity.WashCycleEntity> data) {
public WaterPlanWeekAdapter(Context context,int layoutResId, @Nullable List<WaterPlanWeekEntity.DetailsBean> data) {
super(layoutResId, data);
this.mContext = context;
this.mList = data;
}
@Override
protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.WashCycleEntity item) {
helper.setText(R.id.tv_week,item.getWeek());
LinearLayout linearItem = helper.getView(R.id.linear_item);
View viewStatus = helper.getView(R.id.view_status);
if(helper.getLayoutPosition() == mPos){
linearItem.setBackground(mContext.getResources().getDrawable(R.drawable.shape_water_period_sel_bg));
viewStatus.setVisibility(VISIBLE);
viewStatus.setBackground(mContext.getResources().getDrawable(R.drawable.shape_green_circle));
protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DetailsBean item) {
TextView tvStartTime = helper.getView(R.id.tv_select_time);
CheckBox checkBox = helper.getView(R.id.checkbox);
TextView tvPlanDuration = helper.getView(R.id.tv_plan_duration);
helper.setText(R.id.tv_week_name,item.getWeekName());
if(!TextUtils.isEmpty(item.getStartTime())){
helper.setText(R.id.tv_select_time,item.getStartTime());
}else{
linearItem.setBackground(null);
if(!TextUtils.isEmpty(item.getTime()) && !TextUtils.isEmpty(item.getDuration())){
viewStatus.setVisibility(VISIBLE);
viewStatus.setBackground(mContext.getResources().getDrawable(R.drawable.shape_yellow_circle));
}else{
viewStatus.setVisibility(INVISIBLE);
viewStatus.setBackground(null);
}
helper.setText(R.id.tv_select_time,"");
tvStartTime.setHint(mContext.getString(R.string.select_water_time));
}
if(item.getDurationMin() != 0){
helper.setText(R.id.tv_plan_duration,item.getDurationMin() + "");
}else{
helper.setText(R.id.tv_plan_duration,"");
tvPlanDuration.setHint(mContext.getString(R.string.input_water_plan_time));
}
if(item.getStatus().equals("1")){
checkBox.setChecked(true);
}else{
checkBox.setChecked(false);
}
helper.addOnClickListener(R.id.linear_week);
helper.addOnClickListener(R.id.checkbox);
helper.addOnClickListener(R.id.tv_select_time);
helper.addOnClickListener(R.id.tv_plan_duration);
// LinearLayout linearItem = helper.getView(R.id.linear_item);
// View viewStatus = helper.getView(R.id.view_status);
// if(helper.getLayoutPosition() == mPos){
// linearItem.setBackground(mContext.getResources().getDrawable(R.drawable.shape_water_period_sel_bg));
// viewStatus.setVisibility(VISIBLE);
// viewStatus.setBackground(mContext.getResources().getDrawable(R.drawable.shape_green_circle));
// }else{
// linearItem.setBackground(null);
// if(!TextUtils.isEmpty(item.getTime()) && !TextUtils.isEmpty(item.getDuration())){
// viewStatus.setVisibility(VISIBLE);
// viewStatus.setBackground(mContext.getResources().getDrawable(R.drawable.shape_yellow_circle));
// }else{
// viewStatus.setVisibility(INVISIBLE);
// viewStatus.setBackground(null);
// }
// }
}
public void setSelPos(int position) {

View File

@@ -3,150 +3,62 @@ package com.ckkj.water.plan.entity;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
public class WaterPlanWeekEntity implements Serializable {
/**
* 排程名称
*/
private String scheduleName;
/**
* 状态
* id : 2057637613963182082
* userId : 2056543507514097665
* name : 排程四
* deviceIds : null
* status : 1
* details : [{"createDept":null,"createBy":"2056543507514097665","createTime":"2026-05-22 09:40:10","updateBy":"2056543507514097665","updateTime":"2026-05-22 09:40:10","id":"2057637613963182083","scheduleId":"2057637613963182082","weekday":1,"startTime":"2026-04-11 10:12:12","durationMin":20,"zones":null,"triggerType":"0","status":"1"},{"createDept":null,"createBy":"2056543507514097665","createTime":"2026-05-22 09:40:10","updateBy":"2056543507514097665","updateTime":"2026-05-22 09:40:10","id":"2057637613963182084","scheduleId":"2057637613963182082","weekday":2,"startTime":"2026-04-11 10:12:12","durationMin":20,"zones":null,"triggerType":"0","status":"1"},{"createDept":null,"createBy":"2056543507514097665","createTime":"2026-05-22 09:40:10","updateBy":"2056543507514097665","updateTime":"2026-05-22 09:40:10","id":"2057637613963182085","scheduleId":"2057637613963182082","weekday":3,"startTime":"2026-04-11 10:12:12","durationMin":20,"zones":null,"triggerType":"0","status":"1"}]
*/
private boolean enable;
/**
* 洗水周期列表
*/
private List<WashCycleEntity> washCycleList;
/**
* 关联设备列表
*/
private List<DeviceEntity> deviceList;
public String getScheduleName() {
return scheduleName;
}
public void setScheduleName(String scheduleName) {
this.scheduleName = scheduleName;
}
public boolean isEnable() {
return enable;
}
public void setEnable(boolean enable) {
this.enable = enable;
}
public List<WashCycleEntity> getWashCycleList() {
return washCycleList;
}
public void setWashCycleList(List<WashCycleEntity> washCycleList) {
this.washCycleList = washCycleList;
}
public List<DeviceEntity> getDeviceList() {
return deviceList;
}
public void setDeviceList(List<DeviceEntity> deviceList) {
this.deviceList = deviceList;
}
/**
* 洗水周期
*/
public static class WashCycleEntity {
private String id;
private String userId;
private String name;
private Object deviceIds;
private String status;
private List<DetailsBean> details;
@NoArgsConstructor
@Data
public static class DetailsBean implements Serializable{
/**
* 星期
* 如:周一
* createDept : null
* createBy : 2056543507514097665
* createTime : 2026-05-22 09:40:10
* updateBy : 2056543507514097665
* updateTime : 2026-05-22 09:40:10
* id : 2057637613963182083
* scheduleId : 2057637613963182082
* weekday : 1
* startTime : 2026-04-11 10:12:12
* durationMin : 20
* zones : null
* triggerType : 0
* status : 1
*/
private String week;
/**
* 时间
* 如10:30
*/
private String time;
/**
* 时长
* 如10min
*/
private String duration;
public String getWeek() {
return week;
}
public void setWeek(String week) {
this.week = week;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
}
/**
* 设备实体
*/
public static class DeviceEntity {
/**
* 设备名称
*/
private String deviceName;
/**
* 设备编号
*/
private String deviceCode;
/**
* 是否已关联
*/
private boolean bind;
public String getDeviceName() {
return deviceName;
}
public void setDeviceName(String deviceName) {
this.deviceName = deviceName;
}
public String getDeviceCode() {
return deviceCode;
}
public void setDeviceCode(String deviceCode) {
this.deviceCode = deviceCode;
}
public boolean isBind() {
return bind;
}
public void setBind(boolean bind) {
this.bind = bind;
}
private Object createDept;
private String createBy;
private String createTime;
private String updateBy;
private String updateTime;
private String id;
private String scheduleId;
private int weekday;
private String weekName;
private String startTime;
private int durationMin = 0;
private Object zones;
private String triggerType;
private String status;
}
}

View File

@@ -974,4 +974,18 @@ public class ZYTimeUtils {
}
}
private static final String[] WEEK_NAMES = {"周一", "周二", "周三", "周四", "周五", "周六", "周日"};
/**
* 根据星期索引获取星期名称
* @param weekday 星期索引0=周一1=周二,...6=周日
* @return 对应的星期名称
*/
public static String getWeekName(int weekday) {
if (weekday >= 0 && weekday < 7) {
return WEEK_NAMES[weekday];
}
return "";
}
}