ダイアログを表示すると、他の操作ができないから埋込レイアウトにしとけ
というのがGoogle先生の指示なんだけど、アプリケーションのステート的には、このタスクが終了しないと、どのみち次のオペレーションはできないので、埋込にする意味がないと思う。
処理の途中でアプリを切り替えられると、onDestroyが呼ばれるので、それも困る
そんな時はやり直しですしおすし。
それにダイアログを表示していてもアプリは切り替えられる
埋め込んだところで、大差がないと思うのである。
で、いちいち埋込の画面を作成するのは、大変なのでプログレスダイアログは欲しい。
package com.foo.Helper; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import android.widget.ProgressBar; import com.foo.helper.R; public class CommonProgressDialog extends DialogFragment { private final Context context_; private final String title_; private final String message_; private AlertDialog.Builder builder_; private AlertDialog dialog_; private ProgressBar progressBar_; @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { dialog_ = builder_.create(); return dialog_; } private void BuildBase(final Context context, final String title, final String message) { builder_ = new AlertDialog.Builder(context) .setView(R.layout.progress) .setTitle(title) .setCancelable(false) //.setCanceledOnTouchOutside(false) .setMessage(message); } public CommonProgressDialog(final Context context, final String title, final String message) { this.context_ = context; this.title_ = title; this.message_ = message; BuildBase(context, title, message); } /// 中止ボタンを設置する public void setNegative(final DialogInterface.OnClickListener l) { if( dialog_ == null ) return; dialog_.setButton(DialogInterface.BUTTON_NEGATIVE, getString(android.R.string.cancel), l); } public void setMax(int maxValue) { if( dialog_ == null) return; ProgressBar pb = dialog_.findViewById(R.id.progress_bar); if( pb != null ) { pb.setMax(maxValue); } } public void setProgress(int progress) { if( dialog_ == null) return; ProgressBar pb = dialog_.findViewById(R.id.progress_bar); if( pb != null ) { pb.setProgress(progress); } } public void show() { if( dialog_ == null) { dialog_ = builder_.create(); } dialog_.show(); } public void dismiss() { dialog_.dismiss(); dialog_ = null; } /* public CommonProgressDialog(Context context) { super(context); setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); } public CommonProgressDialog(Context context, int theme) { super(context,theme); setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); } */ }
progress.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="20dp"> <ProgressBar android:id="@+id/progress_bar" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" android:gravity="center" android:text="Please wait! This may take a moment." /> </LinearLayout>
0 件のコメント:
コメントを投稿