web-dev-qa-db-ja.com

Android:プログレスバーがアクティブなときにコントロールを無効にする方法

「いつものように」アクションバーに無限のプログレスバーを表示します。

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
...
setProgressBarIndeterminateVisibility(true);
...
setProgressBarIndeterminateVisibility(false);

実際の作業はバックグラウンドスレッドで行われます(AsyncTask)

問題:UIのすべてのコントロールが有効になっているため、ユーザーは、長期にわたるプロセスが終了する前に、基になるデータを変更し続けることができます。

EditTextを無効にすると、Androidによってキーボードも自動的に閉じられるため、すべてのコントロールを単に無効にすることはできません。

バックグラウンド作業中にユーザー入力を防ぐ方法はありますか?

ありがとう、

クリス

14
cor

あなたができることは、目に見えないダイアログを表示し、それがキャンセルできないようにすることです。その下にあるものはすべて表示されますが、基礎となるすべてのユーザー操作が無効になります。それからあなたがあなたのビジネスを終えたら、あなたは単にそれを却下してあなたの人生を続けます:

Dialog mOverlayDialog = new Dialog(mContext, Android.R.style.Theme_Panel); //display an invisible overlay dialog to prevent user interaction and pressing back
mOverlayDialog.setCancelable(false);
mOverlayDialog.show();  
7
Chris

progressDialog.setcancelable(false);を入れてみてください

5
Aditya Nikhade

アクティビティのプロパティのみを設定しようとしています。代わりに、ProgressDialogを使用してダイアログを表示し、Uiにアクセスできないようにします。

ProgressDialog dialog = ProgressDialog.show(this, "", "Please wait...", true);

編集:ProgressDialogを使用したくない場合は、ルートレイアウトを取得して呼び出します

layout.setEnabled(false)
2
nandeesh

万が一、他の誰かが同じ問題に直面した場合、

テキストの編集を無効にするには、次を使用します:EditText.setFocusable(false);

編集を有効にするには:EditText.setFocusableInTouchMode(true);

1
olzhas