Skip to content

Commit ab19c49

Browse files
committed
版本更新
1 parent 5b4d2e5 commit ab19c49

14 files changed

Lines changed: 326 additions & 105 deletions

File tree

DialogFragmentUtilsLib/src/main/java/com/osard/dialogfragmentutilslib/BaseDialogLibUtils.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.Dialog;
44
import android.content.Context;
5+
import android.content.DialogInterface;
56
import android.content.res.Configuration;
67
import android.graphics.Point;
78
import android.util.Log;
@@ -10,29 +11,45 @@
1011
import android.view.Window;
1112
import android.view.WindowManager;
1213

14+
import androidx.annotation.NonNull;
1315
import androidx.fragment.app.DialogFragment;
1416

1517
import com.osard.dialogfragmentutilslib.init.DialogLibInitSetting;
1618
import com.osard.dialogfragmentutilslib.utils.DensityUtils;
1719

20+
import java.util.HashMap;
21+
import java.util.Map;
22+
import java.util.UUID;
23+
1824

1925
/**
2026
* 加载等待框工具类
2127
*/
2228
public abstract class BaseDialogLibUtils extends DialogFragment implements DialogLibUtils {
2329

30+
protected final static Map<String, BaseDialogLibUtils> MAP = new HashMap<>();
31+
2432
protected Context context;
2533

34+
//别名,同一个别名的对话框同一时间只能弹出一个,在show时如果存在未关闭的对话框则直接返回原本对象
35+
protected String alias = UUID.randomUUID().toString();
36+
2637
protected float landscapeWidthFactor = -1;
2738
protected float portraitWidthFactor = -1;
2839

2940
//临时翻转确定与取消按钮位置
3041
protected Boolean reverseButton;
42+
protected boolean duplicateAliasClose = false;
3143

44+
@NonNull
3245
public Context getContext() {
3346
return context;
3447
}
3548

49+
public String getAlias() {
50+
return alias;
51+
}
52+
3653
/**
3754
* 宽度
3855
* <p>
@@ -153,5 +170,20 @@ protected float getPortraitWidthFactor() {
153170
return portraitWidthFactor;
154171
}
155172

173+
@Override
174+
public void onDismiss(@NonNull DialogInterface dialog) {
175+
super.onDismiss(dialog);
176+
if (!duplicateAliasClose) {
177+
onDismissDialog();
178+
MAP.remove(getAlias());
179+
}
180+
}
156181

182+
protected void onDismissDialog() {
183+
}
184+
185+
public void closeDuplicateAliasDialog() {
186+
duplicateAliasClose = true;
187+
closeDialog();
188+
}
157189
}

DialogFragmentUtilsLib/src/main/java/com/osard/dialogfragmentutilslib/DialogLibAllCustom.java

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import android.content.DialogInterface;
55
import android.content.res.Configuration;
66
import android.os.Bundle;
7-
import android.text.TextUtils;
87
import android.util.Log;
98
import android.view.LayoutInflater;
109
import android.view.View;
@@ -13,11 +12,10 @@
1312
import androidx.annotation.NonNull;
1413
import androidx.annotation.Nullable;
1514
import androidx.fragment.app.FragmentActivity;
15+
import androidx.fragment.app.FragmentManager;
1616

1717
import com.osard.dialogfragmentutilslib.init.DialogLibInitSetting;
1818

19-
import java.util.UUID;
20-
2119
/**
2220
* 全部自定义弹窗提示工具类,需要完全定义dialog的布局
2321
*/
@@ -36,23 +34,14 @@ public static DialogLibAllCustom create(Context context) {
3634
private DialogLibAllCustom() {
3735
}
3836

39-
//别名,同一个别名的对话框同一时间只能弹出一个,在show时如果存在未关闭的对话框则直接返回原本对象
40-
private String alias;
41-
4237
private View customView;
4338

39+
private OnDismissListener onDismissListener;
40+
4441
private void setContext(Context context) {
4542
this.context = context;
4643
}
4744

48-
private String getAlias() {
49-
if (TextUtils.isEmpty(alias)) {
50-
alias = UUID.randomUUID().toString();
51-
}
52-
return alias;
53-
}
54-
55-
5645
/**
5746
* 横屏时dialog占屏幕宽度的百分比系数,0-1之间有效,不含边界
5847
*/
@@ -77,6 +66,14 @@ public DialogLibAllCustom setCancelableDialog(boolean cancelable) {
7766
return this;
7867
}
7968

69+
/**
70+
* 设置dialog关闭时触发的回调
71+
*/
72+
public DialogLibAllCustom setOnDismissListener(OnDismissListener onDismissListener) {
73+
this.onDismissListener = onDismissListener;
74+
return this;
75+
}
76+
8077
/**
8178
* 别名,同一个别名的对话框同一时间只能弹出一个,在show时如果存在未关闭的对话框则直接返回原本对象
8279
* <p>
@@ -92,6 +89,15 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
9289
super.onCreate(savedInstanceState);
9390
}
9491

92+
/**
93+
* 设置对话框是否可取消,不建议直接使用,会破坏链式结构
94+
*/
95+
@Deprecated
96+
@Override
97+
public void setCancelable(boolean cancelable) {
98+
super.setCancelable(cancelable);
99+
}
100+
95101
@Nullable
96102
@Override
97103
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -116,9 +122,21 @@ public void onStart() {
116122
setDialogWidth(TAG, getDialog(), context.getResources().getConfiguration());
117123
}
118124

125+
@Override
126+
protected void onDismissDialog() {
127+
if (null != onDismissListener) {
128+
onDismissListener.dismiss();
129+
}
130+
}
131+
119132
public DialogLibAllCustom show(View customView) {
133+
if (MAP.containsKey(getAlias())) {
134+
MAP.get(getAlias()).closeDuplicateAliasDialog();
135+
}
136+
MAP.put(getAlias(), this);
120137
this.customView = customView;
121-
show(((FragmentActivity) context).getSupportFragmentManager(), getAlias());
138+
FragmentManager fragmentManager = ((FragmentActivity) getContext()).getSupportFragmentManager();
139+
show(fragmentManager, getAlias());
122140
return this;
123141
}
124142

@@ -133,4 +151,8 @@ public boolean closeDialog() {
133151
return true;
134152
}
135153

154+
public interface OnDismissListener {
155+
void dismiss();
156+
}
157+
136158
}

DialogFragmentUtilsLib/src/main/java/com/osard/dialogfragmentutilslib/DialogLibCommon.java

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,18 @@
1717
import androidx.annotation.StringRes;
1818
import androidx.databinding.DataBindingUtil;
1919
import androidx.fragment.app.FragmentActivity;
20+
import androidx.fragment.app.FragmentManager;
2021

2122
import com.osard.dialogfragmentutilslib.databinding.DialogUtilsLibTipBinding;
2223
import com.osard.dialogfragmentutilslib.init.DialogLibInitSetting;
2324

24-
import java.util.UUID;
25-
2625
/**
2726
* 常规弹窗提示工具类
2827
*/
2928
public class DialogLibCommon extends BaseDialogLibUtils {
3029
private final static String TAG = DialogLibCommon.class.getSimpleName();
3130

3231
// private Dialog dialog;
33-
//别名,同一个别名的对话框同一时间只能弹出一个,在show时如果存在未关闭的对话框则直接返回原本对象
34-
private String alias;
3532
private String title;
3633
private CharSequence message;
3734
private String okDesc;
@@ -43,6 +40,7 @@ public class DialogLibCommon extends BaseDialogLibUtils {
4340
private OnBtn onBtn;
4441
private OnBtnMessage onBtnMessage;
4542
private Integer messageGravity;
43+
private OnDismissListener onDismissListener;
4644

4745
private DialogLibCommon() {
4846
}
@@ -83,6 +81,14 @@ public DialogLibCommon setPortraitWidthFactor(float portraitWidthFactor) {
8381
return this;
8482
}
8583

84+
/**
85+
* 设置dialog关闭时触发的回调
86+
*/
87+
public DialogLibCommon setOnDismissListener(OnDismissListener onDismissListener) {
88+
this.onDismissListener = onDismissListener;
89+
return this;
90+
}
91+
8692
/**
8793
* 设置标题显示信息,默认为“提示”
8894
*/
@@ -261,13 +267,6 @@ public DialogLibCommon setOnBtn(OnBtn onBtn) {
261267
return this;
262268
}
263269

264-
private String getAlias() {
265-
if (TextUtils.isEmpty(alias)) {
266-
alias = UUID.randomUUID().toString();
267-
}
268-
return alias;
269-
}
270-
271270
/**
272271
* 别名,同一个别名的对话框同一时间只能弹出一个,在show时如果存在未关闭的对话框则直接返回原本对象
273272
* <p>
@@ -309,6 +308,14 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
309308
super.onCreate(savedInstanceState);
310309
}
311310

311+
/**
312+
* 设置对话框是否可取消,不建议直接使用,会破坏链式结构
313+
*/
314+
@Deprecated
315+
@Override
316+
public void setCancelable(boolean cancelable) {
317+
super.setCancelable(cancelable);
318+
}
312319

313320
@Override
314321
public void onCancel(@NonNull DialogInterface dialog) {
@@ -375,8 +382,20 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
375382
return binding.getRoot();
376383
}
377384

385+
@Override
386+
protected void onDismissDialog() {
387+
if (null != onDismissListener) {
388+
onDismissListener.dismiss();
389+
}
390+
}
391+
378392
public DialogLibCommon show() {
379-
show(((FragmentActivity) context).getSupportFragmentManager(), getAlias());
393+
if (MAP.containsKey(getAlias())) {
394+
MAP.get(getAlias()).closeDuplicateAliasDialog();
395+
}
396+
MAP.put(getAlias(), this);
397+
FragmentManager fragmentManager = ((FragmentActivity) getContext()).getSupportFragmentManager();
398+
show(fragmentManager, getAlias());
380399
return this;
381400
}
382401

@@ -407,4 +426,8 @@ public interface OnBtnMessage {
407426
void btn();
408427
}
409428

429+
public interface OnDismissListener {
430+
void dismiss();
431+
}
432+
410433
}

DialogFragmentUtilsLib/src/main/java/com/osard/dialogfragmentutilslib/DialogLibCustom.java

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@
1515
import androidx.annotation.StringRes;
1616
import androidx.databinding.DataBindingUtil;
1717
import androidx.fragment.app.FragmentActivity;
18+
import androidx.fragment.app.FragmentManager;
1819

1920
import com.osard.dialogfragmentutilslib.databinding.DialogUtilsLibCustomViewBinding;
2021
import com.osard.dialogfragmentutilslib.init.DialogLibInitSetting;
2122

22-
import java.util.UUID;
23-
2423
/**
2524
* 自定义弹窗提示工具类
2625
*/
@@ -39,8 +38,7 @@ public static DialogLibCustom create(Context context) {
3938
private DialogLibCustom() {
4039
}
4140

42-
//别名,同一个别名的对话框同一时间只能弹出一个,在show时如果存在未关闭的对话框则直接返回原本对象
43-
private String alias;
41+
4442
private String title;
4543
private String okDesc;
4644
private String cancelDesc;
@@ -50,6 +48,7 @@ private DialogLibCustom() {
5048
private OnCustomBtnOk onCustomBtnOk;
5149
private OnBtnCancel onBtnCancel;
5250
private OnBtn onBtn;
51+
private OnDismissListener onDismissListener;
5352

5453
private View customView;
5554

@@ -109,13 +108,6 @@ private OnCustomBtnOk getOnCustomBtnOk() {
109108
return onCustomBtnOk;
110109
}
111110

112-
private String getAlias() {
113-
if (TextUtils.isEmpty(alias)) {
114-
alias = UUID.randomUUID().toString();
115-
}
116-
return alias;
117-
}
118-
119111
/**
120112
* 别名,同一个别名的对话框同一时间只能弹出一个,在show时如果存在未关闭的对话框则直接返回原本对象
121113
* <p>
@@ -143,6 +135,14 @@ public DialogLibCustom setTitle(String title) {
143135
return this;
144136
}
145137

138+
/**
139+
* 设置dialog关闭时触发的回调
140+
*/
141+
public DialogLibCustom setOnDismissListener(OnDismissListener onDismissListener) {
142+
this.onDismissListener = onDismissListener;
143+
return this;
144+
}
145+
146146
/**
147147
* 设置标题显示信息,默认为“提示”
148148
*/
@@ -251,6 +251,15 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
251251
super.onCreate(savedInstanceState);
252252
}
253253

254+
/**
255+
* 设置对话框是否可取消,不建议直接使用,会破坏链式结构
256+
*/
257+
@Deprecated
258+
@Override
259+
public void setCancelable(boolean cancelable) {
260+
super.setCancelable(cancelable);
261+
}
262+
254263
@Nullable
255264
@Override
256265
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -310,9 +319,21 @@ public void onStart() {
310319
setDialogWidth(TAG, getDialog(), context.getResources().getConfiguration());
311320
}
312321

322+
@Override
323+
protected void onDismissDialog() {
324+
if (null != onDismissListener) {
325+
onDismissListener.dismiss();
326+
}
327+
}
328+
313329
public DialogLibCustom show(View customView) {
330+
if (MAP.containsKey(getAlias())) {
331+
MAP.get(getAlias()).closeDuplicateAliasDialog();
332+
}
333+
MAP.put(getAlias(), this);
314334
this.customView = customView;
315-
show(((FragmentActivity) context).getSupportFragmentManager(), getAlias());
335+
FragmentManager fragmentManager = ((FragmentActivity) getContext()).getSupportFragmentManager();
336+
show(fragmentManager, getAlias());
316337
return this;
317338
}
318339

@@ -339,4 +360,7 @@ public interface OnBtn {
339360
void btn();
340361
}
341362

363+
public interface OnDismissListener {
364+
void dismiss();
365+
}
342366
}

0 commit comments

Comments
 (0)