バックグラウンドでタスクを実行している間、ボタンやメニュー項目などのすべての UI 要素を無効にできる Android SDK のメソッドはありますか?
そのようなメソッドが SDK に存在したことを思い出せません。
すべての Buttons と MenuItems の List<> を構築し、setEnabled メソッドを介してバックグラウンド タスクの開始時と終了時にそれらの状態を更新する必要がありますか?
私のアドバイスはProgressDialog
、現在のアプローチの代わりに a を使用することです (ダイアログは、ユーザーが UI と対話することも防ぎます。メニューを無効にするだけです)。バックグラウンド ワーカーを開始し、すべての UI ビューを無効にすると、ユーザーは何らかの作業が行われ、アプリを使用できないことがわかります。私にとって、これは紛らわしいDialog
ようで、作業が完了するまでユーザーが待たなければならないことを明確に示しているため、はるかに優れたソリューションのようです。もう 1 つのオプションはProgressBar
、アクティビティを覆うオーバーレイに を配置することです。これが必要な場合、ユーザーは引き続き以下の UI を見ることができます。
すべてのビューを無効にするには、次のような方法を使用します。
private void changeViewsState(ViewGroup parent, boolean state) {
int count = parent.getChildCount();
for (int i = 0; i < count; i++) {
View child = parent.getChildAt(i);
if (child instanceof ViewGroup) {
changeViewsState((ViewGroup) child, state);
} else if (child instanceof View) {
child.setEnabled(state);
}
}
}
システムのコンテンツ パネル ( changeViewsState((ViewGroup) findViewById(android.R.id.content), false);
) またはアクティビティのレイアウトのルートを渡します。
ViewGroup root; // root is a reference of the root of your content view
// in the onCreate method
root = (ViewGroup) getLayoutInflater().inflate(R.layout.your_activity_layout_file, null);
// later use it:
changeViewsState(root, false);
メニュー項目を無効にするには、バックグラウンド作業が開始されようとしているときに設定されるブール フラグがあり、そのフラグを使用して callback でメニュー項目を有効/無効にしますonPrepareOptionMenu
。作業が終了したら、メニューが有効になるようにフラグを元に戻すことを忘れないでください。