package com.application.zhangshi_app_android.ui.home; import android.content.DialogInterface; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.MotionEvent; import android.view.View; import android.widget.PopupWindow; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.utils.Utils; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.HomeMemberAdapter; import com.application.zhangshi_app_android.bean.HomeMemberBean; import com.application.zhangshi_app_android.databinding.ActivityGenealogyBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; import com.github.gzuliyujiang.wheelpicker.DatePicker; import com.github.gzuliyujiang.wheelpicker.OptionPicker; import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; import com.github.gzuliyujiang.wheelpicker.contract.OnOptionPickedListener; import com.hjq.bar.TitleBar; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; /** * @author Ljj * @date 2023.06.12. 16:01 * @desc 家谱 Activity */ public class GenealogyActivity extends DLBaseActivity { private HomeMemberAdapter adapter; private boolean isSearchLayoutVisible; @Override public int getLayoutId() { return R.layout.activity_genealogy; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { } @Override public void initView() { //下拉刷新布局 binding.refreshLayout.setEnableRefresh(false); binding.refreshLayout.setEnableLoadMore(true); binding.refreshLayout.setEnableOverScrollDrag(true); binding.refreshLayout.setOnLoadMoreListener(refreshLayout -> { viewModel.getMoreHomeMembers(); }); //recyclerView适配器 adapter = new HomeMemberAdapter(this); LinearItemDecoration itemDecoration = new LinearItemDecoration(); itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_12)); itemDecoration.setHorizontalSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); binding.recyclerView.addItemDecoration(itemDecoration); binding.recyclerView.setAdapter(adapter); //点击放大镜按钮显示出搜索框 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.pullCollapse(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.getHomeMembers(); binding.layoutSearch.setVisibility(View.GONE); binding.layoutDefault.setVisibility(View.VISIBLE); binding.tvTitle.setText("搜索结果"); hideSoftKeyboard(); }); binding.etSex.setOnClickListener(v -> { List list = Arrays.asList("女","男"); OptionPicker picker = getOptionPicker(list); picker.setTitle("性别"); picker.setOnOptionPickedListener(new OnOptionPickedListener() { @Override public void onOptionPicked(int position, Object item) { viewModel.getRequestBeanLiveData().getValue().setSex(position); binding.etSex.setText(item.toString()); } }); picker.show(); }); binding.etBirthday.setOnClickListener(v -> { DatePicker picker = getDatePicker(); picker.setTitle("生日"); picker.setOnDatePickedListener(new OnDatePickedListener() { @Override public void onDatePicked(int year, int month, int day) { binding.etBirthday.setText(String.format(Locale.CHINA,"%d-%02d-%02d", year, month, day)); } }); picker.show(); }); binding.etIdentity.setOnClickListener(v -> { List list = new ArrayList<>(); for (int i = 1; i < 100; i++) { list.add(i+""); } OptionPicker picker = getOptionPicker(list); picker.setTitle("身份代数"); picker.setOnOptionPickedListener(new OnOptionPickedListener() { @Override public void onOptionPicked(int position, Object item) { viewModel.getRequestBeanLiveData().getValue().setIdentity(position+1); binding.etIdentity.setText("第 " + item + " 代"); } }); picker.show(); }); } @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 public void initData() { viewModel.getHomeMembers(); } @Override public void initLiveDataObserve() { viewModel.getDataListLiveData().observe(this, list -> { List realList = new ArrayList<>(); for (HomeMemberBean homeMemberBean : list) { realList.add(homeMemberBean); if (homeMemberBean.getSpouse() != null){ realList.add(homeMemberBean.getSpouse()); } } adapter.setData(realList); }); viewModel.getMoreListLiveData().observe(this, list -> { List realList = new ArrayList<>(); for (HomeMemberBean homeMemberBean : list) { realList.add(homeMemberBean); if (homeMemberBean.getSpouse() != null){ realList.add(homeMemberBean.getSpouse()); } } adapter.addData(realList); }); } @Override 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(); } @Override public void onLeftClick(TitleBar titleBar) { finish(); } }