From 5d3efa4c93dde0cde474951e5310bb72ebbf4184 Mon Sep 17 00:00:00 2001 From: wjc <1243177876@qq.com> Date: 星期三, 07 五月 2025 15:18:26 +0800 Subject: [PATCH] 2025年05月07日15:18:20 1.2.0 --- app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseSearchActivity.java | 494 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 493 insertions(+), 1 deletions(-) diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseSearchActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseSearchActivity.java index 058b88b..f1fced3 100644 --- a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseSearchActivity.java +++ b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseSearchActivity.java @@ -1,20 +1,512 @@ package com.hdl.photovoltaic.ui.powerstation; +import android.content.Context; +import android.os.AsyncTask; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.hdl.linkpm.sdk.core.exception.HDLException; +import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; +import com.hdl.photovoltaic.databinding.ActivityHouseSearchBinding; +import com.hdl.photovoltaic.enums.ShowErrorMode; +import com.hdl.photovoltaic.enums.SortType; +import com.hdl.photovoltaic.listener.CloudCallBeak; +import com.hdl.photovoltaic.other.HdlCommonLogic; +import com.hdl.photovoltaic.other.HdlFileLogic; +import com.hdl.photovoltaic.other.HdlLogLogic; +import com.hdl.photovoltaic.other.HdlResidenceLogic; +import com.hdl.photovoltaic.other.HdlThreadLogic; +import com.hdl.photovoltaic.other.HdlUniLogic; +import com.hdl.photovoltaic.ui.adapter.SearchHistoryAdapter; +import com.hdl.photovoltaic.ui.adapter.SearchHouseAdapter; +import com.hdl.photovoltaic.ui.bean.HouseIdBean; +import com.hdl.photovoltaic.uni.HDLUniMP; +import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils; +import com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout; +import com.hdl.photovoltaic.widget.refreshlayout.HDLRefreshViewHolder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * 鐢电珯鎼滅储鐣岄潰 + */ public class HouseSearchActivity extends CustomBaseActivity { + private Handler handler; + private Runnable delayedRunnable; + private ActivityHouseSearchBinding viewBinding; + SearchHistoryAdapter searchHistoryAdapter; + SearchHouseAdapter searchHouseAdapter; + + private List<HouseIdBean> houseListBeanIDList = new ArrayList<>(); + + private int currentHouseListPage = 0; // 褰撳墠鐢电珯鍒楄〃椤电爜 + private int currentHouseListTotal = 0; // 鐢电珯鍒楄〃鎬婚〉鐮� + private boolean isHouseLoadingMore = false; // 鏍囪鐢电珯鍒楄〃姝e湪鍔犺浇鏇村鏁版嵁 + + private String currSearchText; + + List<String> searchHistoryTitleList = new ArrayList<>(); @Override public Object getContentView() { - return null; + viewBinding = ActivityHouseSearchBinding.inflate(getLayoutInflater()); + return viewBinding.getRoot(); } @Override public void onBindView(Bundle savedInstanceState) { + setStatusBarTranslucent(); + getWindow().setNavigationBarColor(getColor(R.color.text_FF000000)); + //鍘嗗彶璁板綍鏂囦欢澶瑰垱寤� + HdlFileLogic.getInstance().createFileDir(HdlFileLogic.getInstance().getCurrentUserRootPath()); + //鍒濆鍖栨暟鎹� + initData(); + //鍒濆鍖� + initView(); + //鍒濆鍖栫晫闈㈢洃鍚櫒 + initEvent(); + } + + + + private void initData() { + try { + String json = HdlFileLogic.getInstance().readFile(getHistoryFileNamePath()); + if (TextUtils.isEmpty(json)) { + return; + } + searchHistoryTitleList = new Gson().fromJson(json, new TypeToken<List<String>>() { + }.getType()); + } catch (Exception ignored) { + } + } + + /** + * 涓嬫媺鍒锋柊鐨勯�昏緫 + */ + protected void pullToRefresh() { + viewBinding.listSrl.setDelegate(new BGARefreshLayout.BGARefreshLayoutDelegate() { + @Override + public void onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout) { + handler = new Handler(Looper.getMainLooper()); + + delayedRunnable = new Runnable() { + @Override + public void run() { + viewBinding.listSrl.endRefreshing(); + loadNextPageHouseList(false, 1, true); + } + }; + // 寤惰繜 5 绉掓墽琛� + handler.postDelayed(delayedRunnable, 1000); + } + + + @Override + public boolean onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout) { + + handler = new Handler(Looper.getMainLooper()); + delayedRunnable = new Runnable() { + @Override + public void run() { + viewBinding.listSrl.endLoadingMore(); + //鍔犺浇鏈�鏂版暟鎹畬鎴� + if (!isHouseLoadingMore) { + // 婊戝姩鍒颁簡搴曢儴锛屾墽琛岀浉搴旂殑鎿嶄綔 + loadNextPageHouseList(false, ++currentHouseListPage, false); + } + } + }; + // 寤惰繜 5 绉掓墽琛� + handler.postDelayed(delayedRunnable, 10); + + return true; + } + }); + HDLRefreshViewHolder hdlRefreshViewHolder = new HDLRefreshViewHolder(_mActivity, true); + hdlRefreshViewHolder.setPullDownImageResource(R.mipmap.loading_44); + hdlRefreshViewHolder.setChangeToReleaseRefreshAnimResId(R.drawable.loading_refresh); + hdlRefreshViewHolder.setRefreshingAnimResId(R.drawable.loading_refresh_end); + viewBinding.listSrl.setRefreshViewHolder(hdlRefreshViewHolder); + } + + + + + private void initEvent() { + + //鍚庨�� + viewBinding.backRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + viewBinding.powerStationSearchEt.addTextChangedListener(textWatcher); + + + //鎼滅储 + viewBinding.powerStationSearchTv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //鎼滅储鍏抽敭瀛� + currSearchText = viewBinding.powerStationSearchEt.getText().toString().replace(" ", ""); + if (TextUtils.isEmpty(currSearchText)) { + HdlThreadLogic.toast(_mActivity, R.string.search_content_null); + return; + } + viewBinding.historyListParent.setVisibility(View.GONE); + viewBinding.listParent.setVisibility(View.VISIBLE); + viewBinding.powerStationSearchEt.clearFocus(); + hideSoftInputFromWindow(); + addSearchTextToList(); + loadNextPageHouseList(true, 1, true); + } + }); + + //娓呴櫎 + viewBinding.powerStationClearIv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + currSearchText = ""; + viewBinding.powerStationSearchEt.setText(""); + viewBinding.historyListParent.setVisibility(View.VISIBLE); + viewBinding.listParent.setVisibility(View.GONE); + viewBinding.deviceNullDataIc.getRoot().setVisibility(View.GONE); + searchHistoryAdapter.setList(searchHistoryTitleList); + viewBinding.powerStationSearchEt.requestFocus(); + showSoftInput(); + clearData(); + } + }); + //鍒犻櫎 + viewBinding.powerStationDelIv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.powerStationSearchEt.clearFocus(); + hideSoftInputFromWindow(); + searchHistoryTitleList = new ArrayList<>(); + searchHistoryAdapter.setList(searchHistoryTitleList); + viewBinding.deviceNullDataIc.getRoot().setVisibility(View.GONE); + HdlFileLogic.getInstance().deleteFile(getHistoryFileNamePath()); + + } + }); + //鍘嗗彶璁板綍鐐瑰嚮浜嬩欢 + searchHistoryAdapter.setOnclickListener(new SearchHistoryAdapter.OnClickListener() { + @Override + public void onClick(int position, String title) { + viewBinding.powerStationSearchEt.setText(title); + //鎼滅储鍏抽敭瀛� + currSearchText = viewBinding.powerStationSearchEt.getText().toString().replace(" ", ""); + if (TextUtils.isEmpty(currSearchText)) { + HdlThreadLogic.toast(_mActivity, R.string.search_content_null); + return; + } + viewBinding.powerStationSearchEt.clearFocus(); + hideSoftInputFromWindow(); + viewBinding.historyListParent.setVisibility(View.GONE); + viewBinding.listParent.setVisibility(View.VISIBLE); + addSearchTextToList(); + loadNextPageHouseList(true, 1, true); + + } + }); + //鐢电珯鐐瑰嚮鏄簨浠� + searchHouseAdapter.setOnclickListener(new SearchHouseAdapter.OnClickListener() { + @Override + public void onClick(int position, HouseIdBean houseIdBean) { + //鐐瑰嚮浣忓畢璇︽儏 + HdlLogLogic.print("鐐瑰嚮浣忓畢璇︽儏---" + new Gson().toJson(houseIdBean), false); + HdlResidenceLogic.getInstance().switchHouse(houseIdBean,true); + String path = HDLUniMP.UNI_EVENT_OPEN_HOME_DETAILS + "?homeId=" + houseIdBean.getHomeId() + "&homeName=" + houseIdBean.getHomeName() + "&powerStationStatus=" + houseIdBean.getPowerStationStatus(); + HdlUniLogic.getInstance().openUniMP(path, null); + } + }); } + + /** + * 鏄剧ず杞敭鐩� + */ + public void showSoftInput() { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.showSoftInput(viewBinding.powerStationSearchEt, 0); + + } + + /** + * 闅愯棌杞敭鐩� + */ + public void hideSoftInputFromWindow() { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(viewBinding.getRoot().getWindowToken(), 0); + } + + private void initView() { + viewBinding.historyListParent.setVisibility(View.VISIBLE); + viewBinding.listParent.setVisibility(View.GONE); + viewBinding.powerStationClearIv.setVisibility(View.GONE); + //鍒濆鍖栧巻鍙茶褰曢�傞厤鍣� + searchHistoryAdapter = new SearchHistoryAdapter(_mActivity); + viewBinding.historyListRcv.setLayoutManager(new LinearLayoutManager(_mActivity)); + viewBinding.historyListRcv.setAdapter(searchHistoryAdapter); + searchHistoryAdapter.setList(searchHistoryTitleList); + //鍒濆鍖栫數绔欓�傞厤鍣� + searchHouseAdapter = new SearchHouseAdapter(_mActivity); + viewBinding.listRcv.setLayoutManager(new LinearLayoutManager(_mActivity)); + viewBinding.listRcv.setAdapter(searchHouseAdapter); + viewBinding.powerStationSearchEt.post(new Runnable() { + @Override + public void run() { + viewBinding.powerStationSearchEt.requestFocus(); + } + }); + + pullToRefresh(); + + //鍦ㄧ晫闈腑浣跨敤 + KeyboardStateObserverUtils.getKeyboardStateObserver(_mActivity).setKeyboardVisibilityListener(new KeyboardStateObserverUtils.OnKeyboardVisibilityListener() { + @Override + public void onKeyboardShow(int h) { + //Toast.makeText(MainActivity.this,"閿洏寮瑰嚭",Toast.LENGTH_SHORT).show(); +// viewBinding.powerStationSearchEt.requestFocus(); + + } + + @Override + + public void onKeyboardHide(int h) { + viewBinding.powerStationSearchEt.clearFocus(); + } + + }); + + + } + + + /** + * 杈撳叆鐢电珯鍚嶇О杩涜杩囨护 + */ + private final TextWatcher textWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + String et = viewBinding.powerStationSearchEt.getText().toString().replace(" ", ""); + if (TextUtils.isEmpty(et)) { + viewBinding.powerStationClearIv.setVisibility(View.GONE); + } else { + viewBinding.powerStationClearIv.setVisibility(View.VISIBLE); + } + viewBinding.powerStationSearchEt.setSelection(viewBinding.powerStationSearchEt.length()); + + } + }; + + /** + * 鐗╃悊鎸夐敭杩斿洖浜嬩欢 + */ + @Override + public void onBackPressed() { + super.onBackPressed(); + } + + @Override + protected void onDestroy() { + viewBinding.powerStationSearchEt.removeTextChangedListener(textWatcher); + if (searchHistoryTitleList.size() > 0) { + HdlFileLogic.getInstance().deleteFile(getHistoryFileNamePath()); + HdlFileLogic.getInstance().appendFile(getHistoryFileNamePath(), new Gson().toJson(searchHistoryTitleList)); + } + if (handler != null && delayedRunnable != null) { + handler.removeCallbacks(delayedRunnable); + } + super.onDestroy(); + } + + /** + * 鍒锋柊UI锛堢數绔欙級 + * + * @param isRefreshing 琛ㄧず鏄笅鎷夊埛鏂扮殑 + */ + private void loadNextPageHouseList(boolean isRefreshing, long pageNo, boolean isClear) { + + //鎼滅储鍏抽敭瀛� + if (TextUtils.isEmpty(currSearchText)) { + return; + } + + if (isClear) { + clearData(); + } + //绗竴椤佃鍙栨暟鎹己鍒惰鍙� + if (pageNo > 1 && currentHouseListPage > currentHouseListTotal) { + --currentHouseListPage; + //褰撳墠椤典笉鑳藉ぇ浜庢�婚〉鏁� + return; + } + isHouseLoadingMore = true;//鏍囪璇诲彇鐘舵�� + if (isRefreshing) { + showLoading(); + } + + //鑾峰彇浣忓畢(鐢电珯)ID鍒楄〃 + HdlResidenceLogic.getInstance().getResidenceIdList(SortType.homeName, currSearchText, + "", "", "", "", + pageNo, 20, new CloudCallBeak<HdlResidenceLogic.HouseBeanClass>() { + @Override + public void onSuccess(HdlResidenceLogic.HouseBeanClass houseBeanClass) { + HdlThreadLogic.runMainThread(new Runnable() { + @Override + public void run() { + if (isRefreshing) { + hideLoading(); + } + isHouseLoadingMore = false; + if (houseBeanClass != null) { + currentHouseListTotal = (int) houseBeanClass.getTotalPage(); + currentHouseListPage = (int) houseBeanClass.getPageNo(); + //鏇存柊缂撳瓨 + setHouseIdList(houseBeanClass.getList()); + if (searchHouseAdapter != null) { + //鏇存柊UI + searchHouseAdapter.setList(houseListBeanIDList); + } + nullDataUpdateUi(); + } + } + }, _mActivity, ShowErrorMode.YES); + + } + + @Override + public void onFailure(HDLException e) { + HdlThreadLogic.runMainThread(new Runnable() { + @Override + public void run() { + if (currentHouseListPage > 1) { + --currentHouseListPage; + } + isHouseLoadingMore = false; + if (isRefreshing) { + hideLoading(); + } + + } + }, _mActivity, ShowErrorMode.YES); + } + }); + } + + private void clearData() { + if (houseListBeanIDList != null && houseListBeanIDList.size() > 0) { + houseListBeanIDList.clear(); + } + } + + public void setHouseIdList(List<HouseIdBean> list) { + if (list == null || list.size() == 0) { + return; + } + if (this.houseListBeanIDList.size() == 0) { + this.houseListBeanIDList.addAll(list); + return; + } + for (int i = 0; i < list.size(); i++) { + this.setSingleHouseId(list.get(i)); + } + } + + /** + * 娣诲姞鐢电珯Id鍒板垪琛ㄩ噷闈� + * + * @param houseIdBean -鐢电珯Id瀵硅薄 + */ + public void setSingleHouseId(HouseIdBean houseIdBean) { + try { + if (houseIdBean == null) { + return; + } + boolean if_boolean = false; + for (int i = 0; i < houseListBeanIDList.size(); i++) { + if (houseListBeanIDList.get(i).getHomeId().equals(houseIdBean.getHomeId())) { + //瀛樺湪鏇挎崲 + houseListBeanIDList.remove(i); + houseListBeanIDList.add(i, houseIdBean); + if_boolean = true; + break; + } + } + if (!if_boolean) { + //娌℃湁娣诲姞 + this.houseListBeanIDList.add(houseIdBean); + } + } catch (Exception e) { + String mes = e.getMessage(); + HdlLogLogic.print("---" + mes); + } + } + + + /** + * 娣诲姞鍘嗗彶璁板綍 + */ + private void addSearchTextToList() { + for (int i = 0; i < searchHistoryTitleList.size(); i++) { + if (searchHistoryTitleList.get(i).equals(currSearchText)) { + searchHistoryTitleList.remove(searchHistoryTitleList.get(i)); + } + } + int maxValue = 10; + searchHistoryTitleList.add(0, currSearchText); + if (searchHistoryTitleList.size() > maxValue) { + //鍘嗗彶璁板綍涓嶈兘瓒呭嚭10 + searchHistoryTitleList.remove(searchHistoryTitleList.get(maxValue)); + } + + } + + /** + * 娌℃湁鐢电珯鍒楄〃鐨勬牱寮� + */ + private void nullDataUpdateUi() { + boolean is_data = houseListBeanIDList != null && houseListBeanIDList.size() > 0; + HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity, viewBinding.deviceNullDataIc.getRoot(), viewBinding.deviceNullDataIc.nullDataGifAnimationIv, viewBinding.deviceNullDataIc.nullDataTv, getString(R.string.my_power_station_data_null), is_data); + } + + /** + * 鑾峰彇銆愭悳绱㈠巻鍙茶褰曟枃浠躲�戝叏璺緞 + */ + public String getHistoryFileNamePath() { + return HdlFileLogic.getInstance().getCurrentUserRootPath() + "/house_history.txt"; + } + + } \ No newline at end of file -- Gitblit v1.8.0