mac
2024-05-07 198cbbe0ac7eedba20d43c47b0448845d6a279ba
2024年05月07日19:10:30

备份代码
7个文件已添加
9个文件已修改
1 文件已重命名
990 ■■■■■ 已修改文件
app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/adapter/DeviceInfoAdapter.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/adapter/SearchDeviceAdapter.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/adapter/SearchHistoryAdapter.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/adapter/SearchHouseAdapter.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/bean/HouseIdBean.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/bean/HouseInfoBean.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseSearchActivity.java 374 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/history_del.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/search_back.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/search_bj_ff05000000.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_house_search.xml 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_house_list.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_history_title.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_search_house.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
@@ -99,6 +99,8 @@
        return getAPPInternalStoreFilesPath() + "/upgrade/firmware";
    }
    /**
     * 获取【日志文件】全路径
     */
@@ -319,7 +321,7 @@
            }
//            System.out.println("写入一行数据到文件成功--->" + dataLine);
        } catch (Exception e) {
//            System.out.println("写入一行数据到文件有异常--->" + e.getMessage());
            System.out.println("写入一行数据到文件有异常--->" + e.getMessage());
        }
    }
app/src/main/java/com/hdl/photovoltaic/ui/adapter/DeviceInfoAdapter.java
@@ -47,7 +47,7 @@
            public void onClick(View v) {
                try {
                    if (mOnclickListener != null) {
                        mOnclickListener.onClick((int) holder.item_parent_rl.getTag(), deviceBean);
                        mOnclickListener.onClick((int) holder.itemView.getTag(), deviceBean);
                    }
                } catch (Exception ignored) {
                }
app/src/main/java/com/hdl/photovoltaic/ui/adapter/SearchDeviceAdapter.java
New file
@@ -0,0 +1,99 @@
package com.hdl.photovoltaic.ui.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.ui.bean.DeviceBean;
import java.util.ArrayList;
import java.util.List;
public class SearchDeviceAdapter  extends RecyclerView.Adapter<SearchDeviceAdapter.MyViewHolder> {
    List<DeviceBean> mList;
    Context mContext;
    DeviceInfoAdapter.OnClickListener mOnclickListener;
    public SearchDeviceAdapter(Context context) {
        this.mContext = context;
    }
    @NonNull
    @Override
    public SearchDeviceAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_search_house, parent, false);
        return new MyViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull SearchDeviceAdapter.MyViewHolder holder, int position) {
        DeviceBean deviceBean = this.mList.get(position);
        holder.power_station_name_tv.setText(deviceBean.getHomeName());
        holder.power_station_location_tv.setText(deviceBean.getAddress());
        holder.itemView.setTag(position);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    if (mOnclickListener != null) {
                        mOnclickListener.onClick((int) holder.itemView.getTag(), deviceBean);
                    }
                } catch (Exception ignored) {
                }
            }
        });
    }
    @Override
    public int getItemCount() {
        return this.mList == null ? 0 : this.mList.size();
    }
    public void setOnclickListener(DeviceInfoAdapter.OnClickListener onClickListener) {
        this.mOnclickListener = onClickListener;
    }
    public void setList(List<DeviceBean> newData) {
        if (this.mList == null) {
            this.mList = new ArrayList<>();
        } else {
            this.mList.clear();
        }
        this.mList.addAll(newData);
        notifyDataSetChanged();
    }
    public interface OnClickListener {
        void onClick(int position, DeviceBean deviceBean);
    }
    /**
     * 一行布局容器
     */
    static class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView power_station_name_tv;
        public TextView power_station_location_tv;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            power_station_name_tv = itemView.findViewById(R.id.power_station_name_tv);
            power_station_location_tv = itemView.findViewById(R.id.power_station_location_tv);
        }
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/adapter/SearchHistoryAdapter.java
New file
@@ -0,0 +1,97 @@
package com.hdl.photovoltaic.ui.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.hdl.photovoltaic.R;
import java.util.ArrayList;
import java.util.List;
/**
 * 历史记录适配器
 */
public class SearchHistoryAdapter extends RecyclerView.Adapter<SearchHistoryAdapter.MyViewHolder> {
    List<String> mList;
    Context mContext;
    OnClickListener mOnclickListener;
    public SearchHistoryAdapter(Context context) {
        this.mContext = context;
    }
    @NonNull
    @Override
    public SearchHistoryAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_history_title, parent, false);
        return new MyViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull SearchHistoryAdapter.MyViewHolder holder, int position) {
        String history_title = this.mList.get(position);
        holder.history_title_tv.setText(history_title);
        holder.itemView.setTag(position);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    if (mOnclickListener != null) {
                        mOnclickListener.onClick((int) holder.itemView.getTag(), history_title);
                    }
                } catch (Exception ignored) {
                }
            }
        });
    }
    @Override
    public int getItemCount() {
        return this.mList == null ? 0 : this.mList.size();
    }
    public void setOnclickListener(OnClickListener onClickListener) {
        this.mOnclickListener = onClickListener;
    }
    public void setList(List<String> newData) {
        if (this.mList == null) {
            this.mList = new ArrayList<>();
        } else {
            this.mList.clear();
        }
        this.mList.addAll(newData);
        notifyDataSetChanged();
    }
    public interface OnClickListener {
        void onClick(int position, String title);
    }
    static class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView history_title_tv;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            history_title_tv = itemView.findViewById(R.id.history_title_tv);
        }
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/adapter/SearchHouseAdapter.java
New file
@@ -0,0 +1,102 @@
package com.hdl.photovoltaic.ui.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.ui.bean.HouseIdBean;
import java.util.ArrayList;
import java.util.List;
/**
 * 搜索电站适配器
 */
public class SearchHouseAdapter extends RecyclerView.Adapter<SearchHouseAdapter.MyViewHolder> {
    List<HouseIdBean> mList;
    Context mContext;
    OnClickListener mOnclickListener;
    public SearchHouseAdapter(Context context) {
        this.mContext = context;
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_search_house, parent, false);
        return new MyViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        HouseIdBean houseIdBean = this.mList.get(position);
        holder.power_station_name_tv.setText(houseIdBean.getHomeName());
        holder.power_station_location_tv.setText(houseIdBean.getAddress());
        holder.itemView.setTag(position);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    if (mOnclickListener != null) {
                        mOnclickListener.onClick((int) holder.itemView.getTag(), houseIdBean);
                    }
                } catch (Exception ignored) {
                }
            }
        });
    }
    @Override
    public int getItemCount() {
        return this.mList == null ? 0 : this.mList.size();
    }
    public void setOnclickListener(OnClickListener onClickListener) {
        this.mOnclickListener = onClickListener;
    }
    public void setList(List<HouseIdBean> newData) {
        if (this.mList == null) {
            this.mList = new ArrayList<>();
        } else {
            this.mList.clear();
        }
        this.mList.addAll(newData);
        notifyDataSetChanged();
    }
    public interface OnClickListener {
        void onClick(int position, HouseIdBean houseIdBean);
    }
    /**
     * 一行布局容器
     */
    static class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView power_station_name_tv;
        public TextView power_station_location_tv;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            power_station_name_tv = itemView.findViewById(R.id.power_station_name_tv);
            power_station_location_tv = itemView.findViewById(R.id.power_station_location_tv);
        }
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/bean/HouseIdBean.java
@@ -27,6 +27,11 @@
    private boolean state_select = false;//表示是否显示选中组件(true显示)
    private HouseInfoBean.Location location;//电站地址
    private String address;//详细地址
    public boolean isState_select() {
        return state_select;
@@ -117,5 +122,31 @@
        this.localSecret = localSecret;
    }
    public HouseInfoBean.Location getLocation() {
        return location == null ? new HouseInfoBean.Location() : location;
    }
    public void setLocation(HouseInfoBean.Location location) {
        this.location = location;
    }
    public String getAddress() {
        return address == null ? "" : address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    /**
     * 拼住宅地址
     *
     * @return 住宅地址
     */
    public String getHomeAddress() {
        if (this.location == null) {
            return this.address;
        }
        return this.location.getNationName() + this.location.getProvinceName() + this.location.getCityName() + this.address;
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/bean/HouseInfoBean.java
@@ -4,8 +4,7 @@
 * 电站详情实体类
 */
public class HouseInfoBean extends HouseIdBean {
    private Location location;//电站地址
    private String address;//详细地址
    private String latitude;//纬度
    private String longitude;//经度
    private String timezone;//时区
@@ -18,22 +17,6 @@
    private String zoneType;//区域
    public Location getLocation() {
        return location == null ? new Location() : location;
    }
    public void setLocation(Location location) {
        this.location = location;
    }
    public String getAddress() {
        return address == null ? "" : address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getLatitude() {
        return latitude == null ? "" : latitude;
@@ -177,15 +160,5 @@
    }
    /**
     * 拼住宅地址
     *
     * @return 住宅地址
     */
    public String getHomeAddress() {
        if (this.location == null) {
            return this.address;
        }
        return this.location.nationName + this.location.provinceName + this.location.cityName + this.address;
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java
@@ -1,5 +1,6 @@
package com.hdl.photovoltaic.ui.powerstation;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
@@ -133,12 +134,21 @@
            }
        });
        //添加电站
        //电站添加
        viewBinding.addIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HdlUniLogic.getInstance().openUniMP(HDLUniMP.UNI_EVENT_OPEN_HOME_CREATION, null);
            }
        });
        //电站添搜索
        viewBinding.powerStationSearchClickCl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(_mActivity, HouseSearchActivity.class);
                startActivity(intent);
            }
        });
        //电站设置下拉箭头颜色
@@ -173,7 +183,7 @@
                }
            }
        });
        //进入电站详情,删除电站,移动电站位置
        //电站详情进入,删除电站,移动电站位置
        houseInfoAdapter.setNoOnclickListener(new HouseInfoAdapter.OnclickListener() {
            @Override
            public void onClick(int position, HouseIdBean houseIdBean) {
@@ -269,7 +279,7 @@
            }
        });
        //编辑电站按钮
        //电站编辑按钮
        viewBinding.editIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -287,7 +297,7 @@
                value = isSelected ? SortValue.ascending : SortValue.descending;
            }
        });
        //发电功率筛选
        //电站发电功率筛选
        viewBinding.stationPowerRl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -298,7 +308,7 @@
                value = isSelected ? SortValue.ascending : SortValue.descending;
            }
        });
        //当日发电量筛选
        //电站当日发电量筛选
        viewBinding.stationDayRl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -309,7 +319,7 @@
                value = isSelected ? SortValue.ascending : SortValue.descending;
            }
        });
        //当月发电量筛选
        //电站当月发电量筛选
        viewBinding.stationMonthRl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -320,7 +330,7 @@
                value = isSelected ? SortValue.ascending : SortValue.descending;
            }
        });
        //点击设备
        //设备点击
        deviceInfoAdapter.setOnclickListener(new DeviceInfoAdapter.OnClickListener() {
            @Override
            public void onClick(int position, DeviceBean deviceBean) {
app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseSearchActivity.java
@@ -2,19 +2,391 @@
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";
    }
}
app/src/main/res/drawable/history_del.png
app/src/main/res/drawable/search_back.png
app/src/main/res/drawable/search_bj_ff05000000.xml
File was renamed from app/src/main/res/drawable/search_bj_edeff2.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="@dimen/dp_17" />
    <solid android:color="@color/text_EDEFF2" />
    <solid android:color="#05000000" />
</shape>
app/src/main/res/layout/activity_house_search.xml
@@ -4,6 +4,164 @@
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/text_F5F7FA"
    tools:context=".ui.powerstation.HouseSearchActivity">
    <!--搜索-->
    <RelativeLayout
        android:id="@+id/power_station_search_cl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_35"
        android:layout_marginTop="@dimen/dp_48"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <RelativeLayout
            android:id="@+id/back_rl"
            android:layout_width="@dimen/dp_50"
            android:layout_height="match_parent">
            <ImageView
                android:id="@+id/power_station_back_iv"
                android:layout_width="@dimen/dp_10"
                android:layout_height="@dimen/dp_17"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:layout_marginStart="@dimen/dp_16"
                android:src="@drawable/search_back" />
        </RelativeLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_7"
            android:layout_marginEnd="@dimen/dp_21"
            android:layout_toStartOf="@+id/power_station_search_tv"
            android:layout_toEndOf="@+id/back_rl"
            android:background="@drawable/search_bj_ff05000000">
            <ImageView
                android:id="@+id/power_station_search_iv"
                android:layout_width="@dimen/dp_18"
                android:layout_height="@dimen/dp_18"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:layout_marginStart="@dimen/dp_13"
                android:src="@drawable/search_path" />
            <EditText
                android:id="@+id/power_station_search_et"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:layout_marginStart="@dimen/dp_11"
                android:layout_marginEnd="@dimen/dp_40"
                android:layout_toEndOf="@+id/power_station_search_iv"
                android:background="@null"
                android:gravity="start|center_vertical"
                android:hint="Search the power station"
                android:textColor="@color/text_90000000"
                android:textColorHint="@color/text_40000000"
                android:textSize="@dimen/text_14" />
            <ImageView
                android:id="@+id/power_station_clear_iv"
                android:layout_width="@dimen/dp_20"
                android:layout_height="@dimen/dp_20"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:layout_marginEnd="@dimen/dp_13"
                android:src="@drawable/clear" />
        </RelativeLayout>
        <TextView
            android:id="@+id/power_station_search_tv"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/dp_21"
            android:gravity="center"
            android:text="@string/search"
            android:textColor="@color/text_90000000"
            android:textSize="@dimen/text_16" />
    </RelativeLayout>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/history_list_parent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/power_station_search_cl">
        <TextView
            android:id="@+id/history_list_title_tv"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/dp_23"
            android:layout_marginStart="@dimen/dp_16"
            android:layout_marginTop="@dimen/dp_23"
            android:layout_marginEnd="@dimen/dp_21"
            android:text="@string/history_search"
            android:textColor="@color/text_90000000"
            android:textSize="@dimen/text_16"
            android:textStyle="bold"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <ImageView
            android:id="@+id/power_station_del_iv"
            android:layout_width="@dimen/dp_26"
            android:layout_height="@dimen/dp_26"
            android:layout_marginTop="@dimen/dp_21"
            android:layout_marginEnd="@dimen/dp_16"
            android:src="@drawable/history_del"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/history_list_rcv"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginTop="67dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/list_parent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="@dimen/dp_30"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/power_station_search_cl">
        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
            android:id="@+id/list_srl"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/list_rcv"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/fragment_house_list.xml
@@ -91,11 +91,12 @@
                app:layout_constraintTop_toTopOf="parent">
                <RelativeLayout
                    android:id="@+id/power_station_search_click_cl"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginEnd="@dimen/dp_17"
                    android:layout_toStartOf="@+id/power_station_default_condition_iv"
                    android:background="@drawable/search_bj_edeff2">
                    android:background="@drawable/search_bj_ff05000000">
                    <ImageView
                        android:id="@+id/power_station_search_iv"
@@ -443,7 +444,7 @@
                android:layout_height="@dimen/dp_35"
                android:layout_marginStart="@dimen/dp_13"
                android:layout_marginEnd="@dimen/dp_16"
                android:background="@drawable/search_bj_edeff2"
                android:background="@drawable/search_bj_ff05000000"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">
app/src/main/res/layout/item_history_title.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/dp_51">
    <TextView
        android:id="@+id/history_title_tv"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_23"
        android:layout_marginStart="@dimen/dp_16"
        android:ellipsize="end"
        android:singleLine="true"
        android:textColor="@color/text_90000000"
        android:textSize="@dimen/text_16"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/item_search_house.xml
New file
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/dp_75">
    <ImageView
        android:id="@+id/power_station_search_iv"
        android:layout_width="@dimen/dp_18"
        android:layout_height="@dimen/dp_18"
        android:layout_marginStart="@dimen/dp_16"
        android:src="@drawable/search_path"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/power_station_name_tv"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_23"
        android:layout_marginStart="@dimen/dp_23"
        android:ellipsize="end"
        android:singleLine="true"
        android:textColor="@color/text_90000000"
        android:textSize="@dimen/text_16"
        app:layout_constraintStart_toEndOf="@+id/power_station_search_iv"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/power_station_location_tv"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_17"
        android:layout_marginTop="@dimen/dp_7"
        android:textColor="@color/text_40000000"
        android:textSize="@dimen/text_12"
        app:layout_constraintStart_toStartOf="@+id/power_station_name_tv"
        app:layout_constraintTop_toBottomOf="@+id/power_station_name_tv" />
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/values/strings.xml
@@ -276,6 +276,9 @@
    <string name="installed_capacity">装机容量</string>
    <string name="generation">发电量</string>
    <string name="station_name">电站名称</string>
    <string name="search">搜索</string>
    <string name="history_search">历史搜索</string>
    <string name="search_content_null">搜索内容不能为空.</string>
</resources>