
创建Fragment基类
public abstract class BaseDialogFragment extends DialogFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = getLayoutView(inflater, container, savedInstanceState);
return view;
}
/**
* 获取view
* @param inflater
* @param container
* @param savedInstanceState
* @return
*/
protected abstract View getLayoutView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
/**
* 找控件
*/
protected void initViews(){ }
/**
* 设置数据
*/
protected void initDatum() { }
/**
* 设置监听器
*/
protected void initListeners() { }
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initViews();
initDatum();
initListeners();
}
}创建加载中DialogFragment
SuperRoundLoadingDialogFragment继承基类BaseDialogFragment
public class SuperRoundLoadingDialogFragment extends BaseDialogFragment implements DialogInterface.OnKeyListener {
private TextView messageView;
@Override
protected void initDatum() {
super.initDatum();
String message = getArguments().getString(Constant.id);
if(message == null){
// 默认提示R.string.loading: "加载中"
message = getString(R.string.loading);;
}
messageView.setText(message);
}
// 创建fragment实例,传入要显示的提示
public static SuperRoundLoadingDialogFragment newInstance(String message) {
Bundle args = new Bundle();
// Constant.id常量,随便写什么都可以;我给的值是字符串"ID"
args.putString(Constant.id, message);
SuperRoundLoadingDialogFragment fragment = new SuperRoundLoadingDialogFragment();
fragment.setArguments(args);
return fragment;
}
// 创建fragment实例,使用默认提示
public static SuperRoundLoadingDialogFragment newInstance() {
Bundle args = new Bundle();
SuperRoundLoadingDialogFragment fragment = new SuperRoundLoadingDialogFragment();
fragment.setArguments(args);
return fragment;
}
@Override
protected View getLayoutView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Dialog dialog = getDialog();
// 设置背景透明
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
// 去掉标题
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
// 点击遮罩不关闭
dialog.setCanceledOnTouchOutside(false);
View view = inflater.inflate(R.layout.super_round_dialog_loading, container);
messageView = view.findViewById(R.id.message);
messageView.setText("");
// 不响应返回键
dialog.setOnKeyListener(this);
return view;
}
// 不响应返回键
@Override
public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent keyEvent){
// 当前keycode等于返回
if(keyCode == KeyEvent.KEYCODE_BACK){
return true;
}
return false;
}
}布局
super_round_dialog_loading.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:paddingHorizontal="20dp"
android:paddingVertical="15dp"
android:gravity="center"
android:orientation="vertical"
android:background="@drawable/shape_round_dialog_background"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:minWidth="120dp">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="40dp"
android:layout_height="40dp"
android:indeterminateDrawable="@drawable/anim_super_loading_icon"
android:indeterminateBehavior="repeat"/>
<!-- tools只会在预览展示,不会编译到页面 -->
<TextView
android:id="@+id/message"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
tools:text="加载中"/>
</LinearLayout>
</LinearLayout>shape_round_dialog_background黑色圆角背景
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#88000000" />
<corners android:radius="10dp" />
</shape>anim_super_loading_icon旋转动画
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/super_loading"
android:fromDegrees="0.0"
android:pivotX="50.0%"
android:pivotY="50.0%"
android:toDegrees="-360.0" />super_loading旋转动画的图标
使用
SuperRoundLoadingDialogFragment dialogFragment = SuperRoundLoadingDialogFragment.newInstance("hello");
// 显示
dialogFragment.show(getSupportFragmentManager(), "LoadingDialog");
// 3秒后隐藏
binding.button.postDelayed(()->{
dialogFragment.dismiss();
},3000);显示隐藏封装在基类activity中
public class ...{
// 用弱引用,当activity释放,这里也会正常释放,如不用弱引用,可能造成内存泄漏
private WeakReference<SuperRoundLoadingDialogFragment> loadingDialogReference;
/**
* 显示加载对话框
*/
public void showLoading() {
showLoading(getString(R.string.loading));
}
/**
* 显示加载对话框
*/
public void showLoading(int data) {
showLoading(getString(data));
}
/**
* 显示加载对话框
*/
public void showLoading(String message) {
if (loadingDialogReference == null || loadingDialogReference.get() == null) {
loadingDialogReference = new WeakReference(
SuperRoundLoadingDialogFragment.newInstance(message)
);
}
SuperRoundLoadingDialogFragment dialogData = loadingDialogReference.get();
if (dialogData.getDialog() == null || !dialogData.getDialog().isShowing()) {
dialogData.show(getSupportFragmentManager(), "LoadingDialog");
}
}
/**
* 隐藏加载对话框
*/
public void hideLoading() {
SuperRoundLoadingDialogFragment loadingDialog = loadingDialogReference.get();
if (loadingDialog != null) {
loadingDialog.dismiss();
loadingDialogReference.clear();
}
loadingDialogReference = null;
}
}使用
我们的activity继承这个基类activity就可以使用显示隐藏对话框的方法
showLoading("hello");
hideLoading();
Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.
1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino
我一直梦想, 看到你们相册那样的地方。真棒。
我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。
我热爱这样的想法, 去那么多国家。真的很鼓舞。
能感受到热爱。继续保持 感受。
我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。
1
1
1