正常情况当我们需要实现一个dialog 时候我们需要还需要点击按钮时候 如果我们在当前界面写的时候显的代码有点乱 ,但是当我们将代码封装到一个类里面的时候 一些操作都是需要回调的 这样处理起来可能不是那么方便 下面是我的代码风格 这样做的话相对比较简单
public class HintAlertDialog extends Dialog { Context mcontext; String toastdiaolog; private ClickListenerInterface clickListenerInterface; public HintAlertDialog(@NonNull Context context, int themeResId, String dialog) { super(context, themeResId); this.mcontext = context; toastdiaolog=dialog; init(context,dialog); } public void init(Context context,String dialog) { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.activity_fragment_alertdialog, null); setContentView(view); ImageView iv_close = view.findViewById(R.id.iv_close); TextView textView=view.findViewById(R.id.tv_toast); Button btn_sure = view.findViewById(R.id.btn_sure); textView.setText(dialog); iv_close.setOnClickListener(new clickListener()); btn_sure.setOnClickListener(new clickListener()); WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; int paddingLeft = ViewUtils.dpToPx(43); getWindow().getDecorView().setPadding(paddingLeft, 0, paddingLeft, 0); getWindow().setAttributes(layoutParams); } public void setClicklistener(ClickListenerInterface clickListenerInterface) { this.clickListenerInterface = clickListenerInterface; } private class clickListener implements View.OnClickListener { @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.iv_close: clickListenerInterface.doCancel(); break; case R.id.btn_sure: clickListenerInterface.doConfirm(); break; } } } public interface ClickListenerInterface { public void doConfirm(); public void doCancel(); } }
这样的话 我们只是需要给按钮写一个点击回调接口就行 ,其他操作都是在主界面进行操作的 这样的话 便于我们稍后进行操作
接下来 我们来看看主界面的代码
HintAlertDialog hintDialog = new HintAlertDialog(getContext(), R.style.alert_style, ""); hintDialog.show(); hintDialog.setClicklistener(new HintAlertDialog.ClickListenerInterface() { @Override public void doConfirm() { hintDialog.dismiss(); } @Override public void doCancel() { hintDialog.dismiss(); } }); break; }这样我们封装好的diaolog 不需要做任何通知去通知主界面 这样也是符合我们正常的代码风格的