В настоящее время я работаю над моделированием модального диалога в 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 работало.
Итак, вопрос в том, как заставить основное действие действительно ждать результата?
Спасибо.