Files
Android-WaterProject/app/src/main/java/com/ckkj/water/plan/WaterPlanFragment.java
2026-06-14 09:06:26 +08:00

231 lines
7.6 KiB
Java

package com.ckkj.water.plan;
import static android.view.View.INVISIBLE;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseFragment;
import com.ckkj.water.custom.view.CustomRefreshHeader;
import com.ckkj.water.databinding.WaterPlanFragmentBinding;
import com.ckkj.water.index.entity.WaterDeviceEntity;
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;
import com.ckkj.water.plan.mvp.WaterPlanPresenter;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.google.gson.Gson;
import com.gyf.immersionbar.ImmersionBar;
import com.scwang.smart.refresh.footer.ClassicsFooter;
import com.scwang.smart.refresh.layout.api.RefreshHeader;
import java.util.ArrayList;
import java.util.List;
public class WaterPlanFragment extends BaseFragment<WaterPlanFragmentBinding, WaterPlanPresenter>
implements WaterPlanContract.WaterPlanView {
private List<WaterPlanWeekEntity> mPlanList = new ArrayList<>();
private WaterPlanListAdapter mAdapter;
private int mCurrentPage = 1;
private String mSearchOption = "";
@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();
ImmersionBar.with(mContext)
.statusBarColor(R.color.mainBackgroundColor)
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext))
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.imgBack.setVisibility(INVISIBLE);
viewBinding.includedTitle.tvTitle.setText(getString(R.string.plan_title));
initListener();
mAdapter = new WaterPlanListAdapter(mContext,R.layout.water_plan_list_item,mPlanList);
viewBinding.rvPlans.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
Bundle bundle = new Bundle();
bundle.putSerializable("plan_entity",mPlanList.get(position));
goTo(mContext, PlanDetailActivity.class,bundle);
}
});
RefreshHeader header = new CustomRefreshHeader(mContext);
viewBinding.refresh.setRefreshHeader(header);
viewBinding.refresh.setRefreshFooter(new ClassicsFooter(mContext));
viewBinding.refresh.setOnRefreshListener(layout -> {
mSearchOption = "";
mCurrentPage = 1;
viewBinding.refresh.setNoMoreData(false);
mPresenter.getWaterPlanList(mCurrentPage,mSearchOption);
viewBinding.etInputPlanName.setText("");
});
viewBinding.refresh.setOnLoadMoreListener(layout -> {
mCurrentPage++;
mPresenter.getWaterPlanList(mCurrentPage,mSearchOption);
});
//文本输入搜索排程
viewBinding.etInputPlanName.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// 隐藏键盘
InputMethodManager imm = (InputMethodManager) v.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
// 清除焦点(可选,避免键盘再次弹出)
v.clearFocus();
mSearchOption = v.getText().toString().trim();
mCurrentPage = 1;
// 执行搜索
mPresenter.getWaterPlanList(mCurrentPage,mSearchOption);
return true;
}
return false;
});
}
@Override
protected void onResumeInitData() {
super.onResumeInitData();
showLoadingDialog();
mPresenter.getWaterPlanList(mCurrentPage,mSearchOption);
}
private void initListener() {
setClick(viewBinding.tvAdd);
setClick(viewBinding.includedNoresult.btnRefresh);
}
private void setClick(View view) {
view.setOnClickListener(this::onClick);
}
public void onClick(View v){
switch (v.getId()){
case R.id.tv_add:
goTo(mContext, AddWaterPlanActivity.class,null);
break;
case R.id.btn_refresh:
mCurrentPage = 1;
mPresenter.getWaterPlanList(mCurrentPage,mSearchOption);
break;
}
}
@Override
public void getWaterConfigListSuccess(List<WaterPlanWeekEntity> list,int total) {
hideDialogLoading();
List<WaterPlanWeekEntity> pageList = list == null ? new ArrayList<>() : list;
if (mCurrentPage == 1) {
viewBinding.refresh.finishRefresh(300);
mPlanList.clear(); // 只在刷新时清除
mPlanList = pageList;
} else {
viewBinding.refresh.finishLoadMore(300);
mPlanList.addAll(pageList);
}
mAdapter.setNewData(mPlanList);
// 4. 判断是否还有更多数据
if (mAdapter.getItemCount() >= total || pageList.size() == 0) {
// 使用 post 延迟调用,避免内部状态冲突导致的循环调用
viewBinding.refresh.postDelayed(() -> viewBinding.refresh.setNoMoreData(true), 300);
viewBinding.relNoMore.setVisibility(View.VISIBLE); // 自定义底部提示"暂无更多数据"
} else {
viewBinding.refresh.setNoMoreData(false);
viewBinding.relNoMore.setVisibility(View.GONE);
}
// 5. 控制空布局和内容显示
if (mAdapter.getItemCount() != 0) {
viewBinding.refresh.setVisibility(View.VISIBLE);
viewBinding.relNoresult.setVisibility(View.GONE);
} else {
viewBinding.refresh.setVisibility(View.GONE);
viewBinding.relNoresult.setVisibility(View.VISIBLE);
}
}
@Override
public WaterPlanPresenter createPresenter() {
return new WaterPlanPresenter(new WaterPlanImpl());
}
@Override
public void onNetChange(int netModel) {
}
@Override
public void showError(String message) {
hideDialogLoading();
ToastUtil.showShort(mContext,message);
}
@Override
public void logOut(BaseBean bean) {
}
@Override
public void saveConfigSuccess(WaterPlanWeekEntity entity) {
}
@Override
public void updateConfigSuccess(WaterPlanWeekEntity entity) {
}
@Override
public void updatePlanStatusSuccess(BaseBean bean, String status) {
}
@Override
public void getPlanDetailInfo(WaterPlanWeekEntity entity) {
}
@Override
public void getPlanBindDeviceList(WaterDeviceEntity bean) {
}
@Override
public void planBindDeviceSuccess(BaseBean bean) {
}
@Override
public void deletePlanSuccess(BaseBean bean) {
}
@Override
public void planUnbindDeviceSuccess(BaseBean bean, int position) {
}
}