В эти дни я работаю над имитацией модального диалога в Android. Я много гугл, много дискуссий, но, к сожалению, там не так много вариантов, чтобы получить это модальное. Вот какой фон,
Диалоги, модальные диалоги и блокировка
Диалоги /AlertDialogs: Как выполнить "кадровое выполнение" а диалог вверх (стиль .NET)
Нет никакого прямого способа получить модальное поведение, тогда я придумал 3 возможных решения,
1. Используйте диалоговое действие, например, этот поток, но я все еще не могу заставить основной вид активности ожидать ожидание возврата диалогового окна. Основная деятельность повернулась к статусу остановки и снова была перезапущена.
2. Создайте один рабочий поток и используйте синхронизацию потоков. Тем не менее, это огромная работа по рефакторингу для моего приложения, теперь у меня есть одно основное действие и сервис как в основном потоке пользовательского интерфейса.
3. Возьмите обработку событий в цикле, когда есть модальный диалог, и завершите цикл, когда диалог закрывается. На самом деле это способ создания реального модального диалога, как то, что он делает в Windows. Я все еще не прототипировал этот путь.
Я все равно хотел бы имитировать его с помощью диалоговой работы,
1. Запустить диалог-активность с помощью startActivityForResult()
2. получить результат от onActivityResult()
Здесь некоторый источник
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView v = new MyView(this);
setContentView(v);
}
private final int RESULT_CODE_ALERT = 1;
private boolean mAlertResult = false;
public boolean startAlertDialog() {
Intent it = new Intent(this, DialogActivity.class);
it.putExtra("AlertInfo", "This is an alert");
startActivityForResult(it, RESULT_CODE_ALERT);
// I want to wait right here
return mAlertResult;
}
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case RESULT_CODE_ALERT:
Bundle ret = data.getExtras();
mAlertResult = ret.getBoolean("AlertResult");
break;
}
}
}
Вызывающий startAlertDialog блокирует выполнение и ожидает возвращенный результат. Но startAlertDialog возвратился сразу, конечно, и основное действие перешло в состояние STOP, в то время как DialogActivity встал.
Итак, вопрос в том, как заставить основной вид активности ждать результата?
Спасибо.