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 implements WaterPlanContract.WaterPlanView { private List 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 list,int total) { hideDialogLoading(); List 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) { } }