package com.hdl.photovoltaic.widget; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import com.hdl.photovoltaic.HDLApp; import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.BaseDialog; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.DialogListBinding; import com.hdl.photovoltaic.ui.StartActivity; import com.hdl.photovoltaic.ui.adapter.LanguageAdapter; import com.hdl.photovoltaic.utils.AppManagerUtils; import com.hdl.photovoltaic.utils.LocalManageUtil; import com.hdl.photovoltaic.widget.adapter.ListDialogAdapter; import java.util.List; /** * 动态列表弹窗 */ public class ListDialog extends BaseDialog { private DialogListBinding viewBinding; private ListDialogAdapter listDialogAdapter; private final Context mContext; private List list; private ListDialogAdapter.OnclickListener itemOnclickListener;//点击了的监听器 public ListDialog(@NonNull Context context) { super(context, R.style.Custom_List_Dialog); this.mContext = context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewBinding = DialogListBinding.inflate(getLayoutInflater()); setContentView(viewBinding.getRoot()); setDialogTouchOutsideCloseable(this); initData(); LinearLayoutManager linearLayout = new LinearLayoutManager(mContext); listDialogAdapter = new ListDialogAdapter(this.list, mContext); viewBinding.logicRcv.setLayoutManager(linearLayout); viewBinding.logicRcv.setAdapter(listDialogAdapter); listDialogAdapter.setItemOnclickListener(new ListDialogAdapter.OnclickListener() { @Override public void onClick(int position, LanguageAdapter.ItemData itemData) { for (int i = 0; i < list.size(); i++) { LanguageAdapter.ItemData data = list.get(i); data.setState(false); } list.get(position).setState(true); listDialogAdapter.notifyDataSetChanged(); if (UserConfigManage.getInstance().getCurrentAppLanguage().equals(itemData.getLanguage())) { //同一个不执行弹窗 return; } languageSelectionDialog(position, itemData); } }); } public void setItemOnclickListener(ListDialogAdapter.OnclickListener onclickListener) { this.itemOnclickListener = onclickListener; } private void initData() { list = LocalManageUtil.getLanguageList(); for (int i = 0; i < list.size(); i++) { LanguageAdapter.ItemData itemData = list.get(i); if (itemData.getLanguage().equals(UserConfigManage.getInstance().getCurrentAppLanguage())) { //初始化之前状态 itemData.setState(true); } } } /** * 二次确认提示框 * * @param position 索引值 * @param itemData 选中数据 */ private void languageSelectionDialog(int position, LanguageAdapter.ItemData itemData) { ConfirmationCancelDialog dialog = new ConfirmationCancelDialog(this.mContext); dialog.setTitle(this.mContext.getString(R.string.loading_title_tip)); dialog.setContent(this.mContext.getString(R.string.loading_app_restart)); dialog.show(); dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { @Override public void Confirm() { dialog.dismiss(); if (itemOnclickListener != null) { itemOnclickListener.onClick(position, itemData); } } }); dialog.setNoOnclickListener(new ConfirmationCancelDialog.onNoOnclickListener() { @Override public void Cancel() { //取消之后还原之前状态 for (int i = 0; i < list.size(); i++) { LanguageAdapter.ItemData data = list.get(i); data.setState(false); if (UserConfigManage.getInstance().getCurrentAppLanguage().equals(data.getLanguage())) { data.setState(true); } } listDialogAdapter.notifyDataSetChanged(); dialog.dismiss(); } }); } @SuppressLint("ClickableViewAccessibility") public void setDialogTouchOutsideCloseable(Dialog dialog) { viewBinding.getRoot().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int top = viewBinding.dialogParent.getTop(); int left = viewBinding.dialogParent.getLeft(); int bottom = viewBinding.dialogParent.getBottom(); int right = viewBinding.dialogParent.getRight(); int y = (int) v.getY(); int x = (int) v.getX(); if (top < y && y < bottom) { } else { dismiss(); } if (left < x && x < right) { } else { dismiss(); } } }); } }