wjc
6 天以前 923e59c7e538300d822eb7bf6d43a5465fb1743c
2025-11-19 14:31:50

备份代码
2个文件已添加
5个文件已修改
556 ■■■■ 已修改文件
app/src/main/AndroidManifest.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/message/MessageActivity.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/message/MessageHouseFragment.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/message/SearchMessageHouseActivity.java 435 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_house_search.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_search_message_house.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragement_message_house.xml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml
@@ -69,6 +69,9 @@
        android:supportsRtl="true"
        android:theme="@style/Theme.PhotovoltaicDebug">
        <activity
            android:name=".ui.message.SearchMessageHouseActivity"
            android:exported="false" />
        <activity
            android:name=".ui.message.MessageActivity"
            android:exported="false" />
        <activity
app/src/main/java/com/hdl/photovoltaic/ui/message/MessageActivity.java
@@ -39,6 +39,9 @@
import java.util.List;
import java.util.Map;
/**
 * 电站消息界面
 */
public class MessageActivity extends CustomBaseActivity {
    private FragmentMessageBinding viewBinding;
app/src/main/java/com/hdl/photovoltaic/ui/message/MessageHouseFragment.java
@@ -30,6 +30,7 @@
import com.hdl.photovoltaic.ui.adapter.MessageHouseAdapter;
import com.hdl.photovoltaic.ui.bean.MessageBean;
import com.hdl.photovoltaic.ui.bean.UnCountBean;
import com.hdl.photovoltaic.ui.powerstation.HouseSearchActivity;
import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils;
import com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout;
import com.hdl.photovoltaic.widget.refreshlayout.HDLRefreshViewHolder;
@@ -179,15 +180,12 @@
    private void initEvent() {
        //搜索
        viewBinding.powerStationSearchEt.addTextChangedListener(powerStationSearchWatcher);
        //清除搜索文案
        viewBinding.powerStationClearIv.setOnClickListener(new View.OnClickListener() {
        viewBinding.powerStationSearchCl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewBinding.powerStationSearchEt.setText("");
                viewBinding.powerStationClearIv.setVisibility(View.GONE);
                getMessageHouseList("", false);
                Intent intent = new Intent();
                intent.setClass(_mActivity, SearchMessageHouseActivity.class);
                startActivity(intent);
            }
        });
        //全部已读
@@ -263,22 +261,7 @@
        viewBinding.houseListRcv.setLayoutManager(new LinearLayoutManager(_mActivity));
        viewBinding.houseListRcv.setAdapter(mMessageHouseAdapter);
        this.pullToRefresh();
        //在界面中使用
        KeyboardStateObserverUtils.getKeyboardStateObserver(_mActivity).setKeyboardVisibilityListener(new KeyboardStateObserverUtils.OnKeyboardVisibilityListener() {
            @Override
            public void onKeyboardShow(int h) {
                //Toast.makeText(MainActivity.this,"键盘弹出",Toast.LENGTH_SHORT).show();
//                viewBinding.messageSearchEt.requestFocus();
            }
            @Override
            public void onKeyboardHide(int h) {
                viewBinding.powerStationSearchEt.clearFocus();
            }
        });
    }
    /**
@@ -372,38 +355,8 @@
        }
    }
    /**
     *
     */
    private final TextWatcher powerStationSearchWatcher = 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) {
            //搜索关键字
            String currSearchText = s.toString().replace(" ", "");
            if (TextUtils.isEmpty(currSearchText)) {
                viewBinding.powerStationClearIv.setVisibility(View.GONE);
//                HdlThreadLogic.toast(_mActivity, R.string.search_content_null);
                return;
            }
            viewBinding.powerStationClearIv.setVisibility(View.VISIBLE);
            viewBinding.powerStationSearchEt.clearFocus();
            getMessageHouseList(currSearchText, false);
        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    };
    @Override
    public void onDestroy() {
        super.onDestroy();
        viewBinding.powerStationSearchEt.removeTextChangedListener(powerStationSearchWatcher);
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/message/SearchMessageHouseActivity.java
New file
@@ -0,0 +1,435 @@
package com.hdl.photovoltaic.ui.message;
import android.content.Context;
import android.content.Intent;
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.recyclerview.widget.LinearLayoutManager;
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.config.ConstantManage;
import com.hdl.photovoltaic.databinding.ActivityHouseSearchBinding;
import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
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.HdlMessageLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.ui.adapter.MessageHouseAdapter;
import com.hdl.photovoltaic.ui.adapter.SearchHistoryAdapter;
import com.hdl.photovoltaic.ui.bean.MessageBean;
import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils;
import com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout;
import com.hdl.photovoltaic.widget.refreshlayout.HDLRefreshViewHolder;
import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
/**
 * 搜索电站消息
 */
public class SearchMessageHouseActivity extends CustomBaseActivity {
    private ActivityHouseSearchBinding viewBinding;
    private Handler handler;
    private Runnable delayedRunnable;
    SearchHistoryAdapter searchHistoryAdapter;
    MessageHouseAdapter searchMessageHouseAdapter;
    List<MessageBean> mList = new ArrayList<>();
    List<String> searchHistoryTitleList = new ArrayList<>();
    private String currSearchText;
    @Override
    public Object getContentView() {
        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();
                        getMessageHouseList(currSearchText, false);
                    }
                };
                // 延迟 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) {
//                            // 滑动到了底部,执行相应的操作
//                            getMessageHouseList(currSearchText,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(" ", "");
                viewBinding.historyListParent.setVisibility(View.GONE);
                viewBinding.listParent.setVisibility(View.VISIBLE);
                viewBinding.powerStationSearchEt.clearFocus();
                hideSoftInputFromWindow();
                addSearchTextToList();
                getMessageHouseList(currSearchText, 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();
                mList.clear();
                searchMessageHouseAdapter.setList(mList);
            }
        });
        //删除
        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();
                getMessageHouseList(currSearchText, true);
            }
        });
        //电站点击是事件
        if (searchMessageHouseAdapter != null) {
            searchMessageHouseAdapter.setOnclickListener(new MessageHouseAdapter.OnClickListener() {
                @Override
                public void onClick(int position, MessageBean messageBean) {
                    Intent intent = new Intent();
                    intent.putExtra("messageBean", new Gson().toJson(messageBean));
                    intent.setClass(_mActivity, MessageActivity.class);
                    startActivity(intent);
                }
            });
        }
    }
    /**
     * 显示软键盘
     */
    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);
        //初始化电站适配器
        searchMessageHouseAdapter = new MessageHouseAdapter(_mActivity);
        viewBinding.listRcv.setLayoutManager(new LinearLayoutManager(_mActivity));
        viewBinding.listRcv.setAdapter(searchMessageHouseAdapter);
        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());
        }
    };
    /**
     * 重新更新列表数据
     */
    private void updateRecyclerViewList() {
        if (searchMessageHouseAdapter == null) {
            return;
        }
        searchMessageHouseAdapter.setList(mList);
        nullDataUpdateUi();
    }
    /**
     * 物理按键返回事件
     */
    @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();
    }
    /**
     * 添加历史记录
     */
    private void addSearchTextToList() {
        if (TextUtils.isEmpty(currSearchText.replace(" ", ""))) {
            return;
        }
        for (int i = 0; i < searchHistoryTitleList.size(); i++) {
            if (searchHistoryTitleList.get(i).equals(currSearchText)) {
                searchHistoryTitleList.remove(searchHistoryTitleList.get(i));
            }
        }
        final int maxValue = 10;
        searchHistoryTitleList.add(0, currSearchText);
        if (searchHistoryTitleList.size() > maxValue) {
            //历史记录不能超出10
            searchHistoryTitleList.remove(searchHistoryTitleList.get(maxValue));
        }
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventMessage(BaseEventBus eventBus) {
        super.onEventMessage(eventBus);
        if (eventBus == null) {
            return;
        }
        //接收外部点击事件
        if (eventBus.getTopic().equals(ConstantManage.refresh_message_house)) {
            EventBus.getDefault().removeStickyEvent(eventBus);
            getMessageHouseList(currSearchText, false);
        }
    }
    /**
     * 获取账号下全部电站消息
     *
     * @param homeName      电站名称(搜索用的),如果是空字符串默认读取全部
     * @param isShowLoading 是否需要加载窗(true=需要,false=不需要)
     */
    private void getMessageHouseList(String homeName, boolean isShowLoading) {
        if (isShowLoading) {
            showLoading();
        }
        HdlMessageLogic.getInstance().getMessageHouseList(homeName, new CloudCallBeak<List<MessageBean>>() {
            @Override
            public void onSuccess(List<MessageBean> list) {
                if (isShowLoading) {
                    hideLoading();
                }
                mList.clear();
                if (list != null && !list.isEmpty()) {
                    mList.addAll(list);
                }
                updateRecyclerViewList();
            }
            @Override
            public void onFailure(HDLException e) {
                if (isShowLoading) {
                    hideLoading();
                }
            }
        });
    }
    /**
     * 没有电站列表的样式
     */
    private void nullDataUpdateUi() {
        boolean is_data = mList != null && mList.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() + "/message_house_history.txt";
    }
}
app/src/main/res/layout/activity_house_search.xml
@@ -33,10 +33,11 @@
        <RelativeLayout
            android:id="@+id/search_et_bj"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_7"
            android:layout_marginEnd="@dimen/dp_21"
            android:layout_marginEnd="@dimen/dp_11"
            android:layout_toStartOf="@+id/power_station_search_tv"
            android:layout_toEndOf="@+id/back_rl"
            android:background="@drawable/search_bj_ff1c1c1e">
@@ -76,17 +77,23 @@
                android:src="@drawable/clear" />
        </RelativeLayout>
        <TextView
        <LinearLayout
            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_centerVertical="true">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginStart="@dimen/dp_10"
            android:layout_marginEnd="@dimen/dp_21"
            android:gravity="center"
            android:text="@string/search"
            android:textColor="@color/text_FFACACAC"
            android:textSize="@dimen/text_14" />
        </LinearLayout>
    </RelativeLayout>
@@ -158,7 +165,10 @@
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/list_rcv"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
                android:layout_height="match_parent"
                android:clipToPadding="false"
                android:paddingTop="@dimen/dp_10"
                />
        </com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/activity_search_message_house.xml
New file
@@ -0,0 +1,10 @@
<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.message.SearchMessageHouseActivity">
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/fragement_message_house.xml
@@ -33,31 +33,16 @@
                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"
            <TextView
                android:id="@+id/power_station_search_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                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="@string/search_station"
                android:textColor="@color/text_FFACACAC"
                android:textColorHint="@color/text_FF5B5B5B"
                android:text="@string/search_station"
                android:textColor="@color/text_FF5B5B5B"
                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"
                android:visibility="gone" />
        </RelativeLayout>
        <ImageView
@@ -88,8 +73,7 @@
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="false"
            android:paddingTop="@dimen/dp_10"
            />
            android:paddingTop="@dimen/dp_10" />
    </com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout>
    <!--没有数据显示样式-->