| | |
| | | |
| | | |
| | | import android.os.Bundle; |
| | | import android.text.Editable; |
| | | import android.text.TextUtils; |
| | | import android.text.TextWatcher; |
| | | import android.view.View; |
| | | |
| | | 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.HdlFileLogic; |
| | | import com.hdl.photovoltaic.other.HdlLogLogic; |
| | | import com.hdl.photovoltaic.other.HdlResidenceLogic; |
| | | import com.hdl.photovoltaic.other.HdlThreadLogic; |
| | | import com.hdl.photovoltaic.ui.adapter.SearchHistoryAdapter; |
| | | import com.hdl.photovoltaic.ui.adapter.SearchHouseAdapter; |
| | | import com.hdl.photovoltaic.ui.bean.HouseIdBean; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 电站搜索界面 |
| | | */ |
| | | public class HouseSearchActivity extends CustomBaseActivity { |
| | | |
| | | 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; // 标记电站列表正在加载更多数据 |
| | | |
| | | 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(); |
| | | //历史记录文件夹创建 |
| | | 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) { |
| | | } |
| | | } |
| | | |
| | | |
| | | 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); |
| | | addSearchTextToList(); |
| | | loadNextPageHouseList(true, 1, true); |
| | | } |
| | | }); |
| | | |
| | | |
| | | //下拉箭头颜色 |
| | | viewBinding.listSrl.setColorSchemeResources(R.color.text_FF245EC3); |
| | | //下拉读取 |
| | | viewBinding.listSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { |
| | | @Override |
| | | public void onRefresh() { |
| | | viewBinding.listSrl.setRefreshing(false); |
| | | loadNextPageHouseList(true, 1, true); |
| | | } |
| | | }); |
| | | //上拉读取 |
| | | viewBinding.listRcv.addOnScrollListener(new RecyclerView.OnScrollListener() { |
| | | @Override |
| | | public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { |
| | | LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); |
| | | if (layoutManager == null) { |
| | | return; |
| | | } |
| | | int visibleItemCount = layoutManager.getChildCount(); |
| | | int totalItemCount = layoutManager.getItemCount(); |
| | | int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); |
| | | if (visibleItemCount > 0 && visibleItemCount + firstVisibleItemPosition == totalItemCount) { |
| | | if (!isHouseLoadingMore) { |
| | | // 滑动到了底部,执行相应的操作 |
| | | HdlLogLogic.print("--->滑动到了底部"); |
| | | loadNextPageHouseList(false, ++currentHouseListPage, false); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | //清除 |
| | | 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); |
| | | searchHistoryAdapter.setList(SearchHistoryTitleList); |
| | | clearData(); |
| | | } |
| | | }); |
| | | //删除 |
| | | viewBinding.powerStationDelIv.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | SearchHistoryTitleList = new ArrayList<>(); |
| | | searchHistoryAdapter.setList(SearchHistoryTitleList); |
| | | HdlFileLogic.getInstance().deleteFile(getHistoryFileNamePath()); |
| | | } |
| | | }); |
| | | //历史记录点击事件 |
| | | searchHistoryAdapter.setOnclickListener(new SearchHistoryAdapter.OnClickListener() { |
| | | @Override |
| | | public void onClick(int position, String title) { |
| | | viewBinding.powerStationSearchEt.setText(title); |
| | | } |
| | | }); |
| | | //电站点击是事件 |
| | | searchHouseAdapter.setOnclickListener(new SearchHouseAdapter.OnClickListener() { |
| | | @Override |
| | | public void onClick(int position, HouseIdBean houseIdBean) { |
| | | |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 输入电站名称进行过滤 |
| | | */ |
| | | 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)); |
| | | } |
| | | 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) { |
| | | initData(); |
| | | //更新UI |
| | | searchHouseAdapter.setList(houseListBeanIDList); |
| | | } |
| | | } |
| | | } |
| | | }, _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)); |
| | | } |
| | | } |
| | | SearchHistoryTitleList.add(currSearchText); |
| | | // 倒序排列数据(搜索最后排在前面) |
| | | Collections.reverse(SearchHistoryTitleList); |
| | | if (SearchHistoryTitleList.size() > 10) { |
| | | //历史记录不能超出10 |
| | | SearchHistoryTitleList.remove(SearchHistoryTitleList.get(11)); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 获取【搜索历史记录文件】全路径 |
| | | */ |
| | | public String getHistoryFileNamePath() { |
| | | return HdlFileLogic.getInstance().getCurrentUserRootPath() + "/house_history.txt"; |
| | | } |
| | | } |