Существует диалоговое окно с некоторыми кнопками поверх моей активности. Когда пользователь нажимает кнопку, возникает сетевой запрос и отображается диалог выполнения. Таким образом, должно быть как минимум два диалога за раз, что невозможно (я думаю). Здесь я вижу два возможных решения:
Есть ли другой вариант?
Я думаю, это зависит от того, что происходит ПОСЛЕ того, как был выполнен сетевой запрос.
Из "чистого" представления я бы рекомендовал № 1 и сохранить все "действия" как можно более индивидуальными. Это приводит к меньшим сегментам кода для каждого действия, которое может быть выполнено.
В зависимости от ваших потребностей (после сетевого запроса, все еще есть внутри диалога), # 2 тоже может быть. Это гораздо больше работы. В этом случае просто поместите некоторый (View.INVISIBLE) индикатор прогресса в диалоговом окне и покажите/спрячьте по требованию, пока ваш сетевой запрос (надеюсь, в AsyncTask) запущен. Также setEnabled (false) ваши кнопки за это время. Позаботьтесь об отмене диалога по запросу пользователя (кнопка "Назад" ).
Да, есть еще один вариант - динамически (runtime) добавить ProgressBar
в ваш диалог, а затем сразу после завершения ProgressBar
удалить его.
<TableLayout
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:stretchColumns="*">
<TableRow>
<TextView
android:text="@string/myText"
/>
</TableRow>
<TableRow android:id="@+id/progressBarHere"/>
<TableRow>
<Button
android:id="@+id/ok"
android:text="@string/ok"
android:layout_width="0dp"
android:layout_weight="1"
/>
<Button
android:id="@+id/cancel"
android:text="@string/cancel"
android:layout_width="0dp"
android:layout_weight="1"
/>
</TableRow>
</TableLayout>
Затем в код smth like:
final TableRow tr = (TableRow) findViewById(R.id.progressBarHere);
ProgressBar pb=new ProgressBar(activity);
//...
tr.addView(pb);
android:theme="@android:style/Theme.Dialog"
в свой манифест для этого действия. Ваша активность больше не будет полноэкранной и перекрывает вызывающую активность. Теперь не стесняйтесь вызывать ProgressDialog по вашей поддельной "DialogActivity".