Несколько диалогов одновременно

1

Существует диалоговое окно с некоторыми кнопками поверх моей активности. Когда пользователь нажимает кнопку, возникает сетевой запрос и отображается диалог выполнения. Таким образом, должно быть как минимум два диалога за раз, что невозможно (я думаю). Здесь я вижу два возможных решения:

  • при нажатии кнопки, скрыть главное диалоговое окно и показать диалог выполнения
  • обернуть все, что появляется в одном диалоговом окне, и управлять им вручную

Есть ли другой вариант?

Теги:
popup
dialog

2 ответа

1
Лучший ответ

Я думаю, это зависит от того, что происходит ПОСЛЕ того, как был выполнен сетевой запрос.

Из "чистого" представления я бы рекомендовал № 1 и сохранить все "действия" как можно более индивидуальными. Это приводит к меньшим сегментам кода для каждого действия, которое может быть выполнено.

В зависимости от ваших потребностей (после сетевого запроса, все еще есть внутри диалога), # 2 тоже может быть. Это гораздо больше работы. В этом случае просто поместите некоторый (View.INVISIBLE) индикатор прогресса в диалоговом окне и покажите/спрячьте по требованию, пока ваш сетевой запрос (надеюсь, в AsyncTask) запущен. Также setEnabled (false) ваши кнопки за это время. Позаботьтесь об отмене диалога по запросу пользователя (кнопка "Назад" ).

  • 0
    Диалоги не статичны - они загружаются с сервера. Активность просмотра контента также есть. Вроде как браузер. Поэтому я думаю, что для пользователя важно иметь возможность видеть полное предыдущее состояние приложения в ожидании следующего.
  • 0
    Хорошо, как насчет этого: вы не используете диалог, но вы используете активность, которая выглядит как диалог. Для этого добавьте android:theme="@android:style/Theme.Dialog" в свой манифест для этого действия. Ваша активность больше не будет полноэкранной и перекрывает вызывающую активность. Теперь не стесняйтесь вызывать ProgressDialog по вашей поддельной "DialogActivity".
Показать ещё 2 комментария
0

Да, есть еще один вариант - динамически (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);
  • 0
    О, спасибо, но это было бы слишком сложно - окно «Пожалуйста, подождите» может появиться, когда диалоговое окно не отображается (чаще всего это так), или может остаться на экране до его показа и после этого тоже… Я думаю, что Единственный способ теперь состоит в том, чтобы иметь представление «наложения» в виде диалога, с другими встроенными элементами.
  • 0
    Кстати, нет ли лучшего способа сделать «оверлей», который живет независимо от основного контента? Похоже, что диалоговое окно не оптимизировано для Android
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню