Android: Как получить модальный диалог или подобное модальное поведение?

В настоящее время я работаю над моделированием модального диалога в 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 работало.

Итак, вопрос в том, как заставить основное действие действительно ждать результата?
Спасибо.

53
задан Community 23 May 2017 в 00:31
поделиться