В эти дни я работаю над симуляцией модального диалога в Android.Я много гуглил, есть много дискуссий, но, к сожалению, не так много вариантов, чтобы сделать это модальным.Вот некоторый фон,
Диалоги, Модальные Диалоги и Блокировка
Диалоги / AlertDialogs: Как "заблокировать выполнение", когда диалог открыт (стиль .NET)
Нет прямого способа получить модальное поведение, тогда я нашел 3 возможных решения,
1. Используйте занятие на тему диалога, как это thread сказал, но я все еще могу 'не заставлять основную деятельность действительно ждать возвращения диалоговой активности.Основная активность превратилась в состояние остановки и затем была перезапущена.
2. Создайте один рабочий поток и используйте синхронизацию потоков.Тем не менее, это огромная работа по рефакторингу для моего приложения, теперь у меня есть одно основное действие и служба в основном потоке пользовательского интерфейса.
3. Возьмите на себя обработку событий в цикле, когда есть модальное диалоговое окно, и выход из циклакогда диалог закрывается.На самом деле это способ создать настоящий модальный диалог, как это делается в Windows.Я до сих пор не прототипировал этот способ.
Я все еще хотел бы смоделировать его с помощью диалоговой темы,
1. Запустите диалоговое действие с помощью startActivityForResult ()
2. получите результатfrom 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 работала.
Итак, вопрос в том, как заставить основную деятельность действительно ждать результата?
Спасибо.