Linjiajia
2023-09-12 efafbbf142c81c233c71de636a2d3ce9dc2124f0
app/src/main/java/com/application/zhangshi_app_android/ui/function/ContactsActivity.java
@@ -1,5 +1,6 @@
package com.application.zhangshi_app_android.ui.function;
import android.graphics.drawable.ColorDrawable;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupWindow;
@@ -7,7 +8,11 @@
import androidx.databinding.library.baseAdapters.BR;
import androidx.lifecycle.Observer;
import com.android.app_base.manager.AppManager;
import com.android.app_base.utils.ScreenSizeUtils;
import com.android.app_base.utils.Utils;
import com.android.app_base.utils.rxbus.MessageEvent;
import com.android.app_base.utils.rxbus.RxBus;
import com.android.app_base.widget.LinearItemDecoration;
import com.application.zhangshi_app_android.R;
@@ -23,6 +28,8 @@
import java.util.List;
import java.util.Set;
import io.reactivex.functions.Consumer;
/**
 * @author Gss
 * @date 2023.04.18. 20:33
@@ -31,6 +38,8 @@
public class ContactsActivity extends DLBaseActivity<ActivityContactsBinding,ContactsActivityViewModel> {
    private ContactsRvAdapter adapter;
    private PopupWindow mOperatePopupWindow;
    private boolean isSearchLayoutVisible;
    @Override
    public int getLayoutId() {
        return R.layout.activity_contacts;
@@ -48,6 +57,14 @@
    @Override
    public void initView() {
        //下拉刷新布局
        binding.refreshLayout.setEnableRefresh(false);
        binding.refreshLayout.setEnableLoadMore(true);
        binding.refreshLayout.setEnableOverScrollDrag(true);
        binding.refreshLayout.setOnLoadMoreListener(refreshLayout -> {
            viewModel.loadMoreContacts();
        });
        //recyclerView适配器
        adapter = new ContactsRvAdapter(this);
        LinearItemDecoration itemDecoration = new LinearItemDecoration();
        itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_12));
@@ -55,12 +72,58 @@
        itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20));
        binding.recyclerView.addItemDecoration(itemDecoration);
        binding.recyclerView.setAdapter(adapter);
        //右上角操作弹窗
        mOperatePopupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_contacts_import,null));
        mOperatePopupWindow.getContentView().findViewById(R.id.layout_contacts_import).setOnClickListener(v -> {
            mOperatePopupWindow.dismiss();
            AppManager.getAppManager().startActivity(ContactsImportActivity.class);
        });
        //点击弹出操作弹窗
        binding.ivOperate.setOnClickListener(v -> {
            mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0);
        });
        //点击放大镜按钮显示出搜索框
        binding.ivSearchDefault.setOnClickListener(v -> {
            binding.layoutSearch.setVisibility(View.VISIBLE);
            binding.layoutDefault.setVisibility(View.GONE);
        });
        //点击搜索框菜单下拉出 搜索参数
        binding.ivSearchType.setOnClickListener(v -> {
            if (!isSearchLayoutVisible){
                binding.layoutSearchParameter.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
                int targetHeight = binding.layoutSearchParameter.getMeasuredHeight();
                Utils.dropExpand(binding.containerSearchParameter,0, targetHeight);
                isSearchLayoutVisible = true;
            }
        });
        //搜索参数layout添加空点击事件,防止点击它内部view时它后面的recycler还能响应点击事件
        binding.layoutSearchParameter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
        //点击搜索按钮进行搜索
        binding.ivSearch.setOnClickListener(v -> {
            viewModel.getContacts();
            binding.layoutSearch.setVisibility(View.GONE);
            binding.layoutDefault.setVisibility(View.VISIBLE);
            binding.tvTitle.setText("搜索结果");
            hideSoftKeyboard();
        });
    }
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();
        if (isSearchLayoutVisible){
            if (!Utils.isPointInsideView(x, y, binding.layoutSearchParameter)) {
                Utils.pullCollapse(binding.containerSearchParameter, binding.layoutSearchParameter.getMeasuredHeight(),0);
                isSearchLayoutVisible = false;
                return true;
            }
        }
        return super.dispatchTouchEvent(event);
    }
    @Override
@@ -91,13 +154,68 @@
            }
            adapter.setData(list);
        });
        viewModel.getMoreListLiveData().observe(this, list -> {
            //已经有名字的,直接添加到对应的名字下面
            //没有名字的,新建一个名字,添加到对应的名字下面
            List<ContactsBean> data = adapter.getData();
            List<ContactsDetailBean> newData = new ArrayList<>();
            Set<String> maNames = new HashSet<>();
            for (ContactsDetailBean contactsDetailBean : list) {
                boolean isAdd = false;
                for (ContactsBean bean : data) {
                    if (contactsDetailBean.getMyName().equals(bean.getMyName())) {
                        bean.getContactsDetailBeans().add(contactsDetailBean);
                        isAdd = true;
                        break;
                    }
                }
                if (!isAdd) {
                    maNames.add(contactsDetailBean.getMyName());
                    newData.add(contactsDetailBean);
                }
            }
            for (String name : maNames) {
                ContactsBean bean = new ContactsBean();
                bean.setMyName(name);
                List<ContactsDetailBean> detailBeans = new ArrayList<>();
                for (ContactsDetailBean detailBean : list) {
                    if (name.equals(detailBean.getMyName())) {
                        detailBeans.add(detailBean);
                    }
                }
                bean.setContactsDetailBeans(detailBeans);
                adapter.addItem(bean);
            }
        });
        RxBus.getInstance().toObservable(this, MessageEvent.class)
                .subscribe(new Consumer<MessageEvent>() {
                    @Override
                    public void accept(MessageEvent event) throws Exception {
                        if (event.getMessageEventCode() == MessageEvent.EVENT_REFRESH_DATA){
                            viewModel.getContacts();
                        }
                    }
                });
    }
    @Override
    public void onClick(View v) {
        super.onClick(v);
        if (v.getId() == R.id.layout_contacts_import){
            mOperatePopupWindow.dismiss();
        }
    protected void dataNull() {
        super.dataNull();
        binding.layoutDataNull.setVisibility(View.VISIBLE);
        binding.refreshLayout.setVisibility(View.GONE);
    }
    @Override
    protected void dataFinish() {
        super.dataFinish();
        binding.refreshLayout.finishLoadMore();
    }
    @Override
    protected void hide() {
        super.hide();
        binding.layoutDataNull.setVisibility(View.GONE);
        binding.refreshLayout.setVisibility(View.VISIBLE);
        binding.refreshLayout.finishLoadMore();
    }
}