Делаем startActivityForResult () модальным

Я использую средство выбора учетной записи для своего приложения для Android.

Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE }, false, null, null, null, null);
startActivityForResult(intent, REQUEST_CODE_EMAIL);

Все работает нормально. Но я хочу знать, можно ли заставить пользователя нажать «ОК» или «Отмена». В настоящее время, если пользователь щелкает вне этого диалогового окна, это то же самое, что нажатие кнопки «Отмена».

Есть ли способ сделать диалоговое окно модальным, чтобы заставить пользователя щелкнуть либо «ОК», либо «Отмена».

На мой взгляд, отменить это диалоговое окно слишком легко, иногда это происходит непреднамеренно, а затем диалоговое окно исчезает.


person kaiser    schedule 03.03.2019    source источник


Ответы (1)


Если у вас есть Activity (даже если оно выглядит как диалог), вам следует сделать

this.setFinishOnTouchOutside (ложь);

если вы использовали класс Dialog, вы должны позвонить

dialog.setFinishOnTouchOutside (ложь)

если вы хотите предотвратить его закрытие при щелчке по фоновой активности. Надеюсь, это поможет.

person Sahil    schedule 03.03.2019
comment
Спасибо, я думаю, это правильный путь. Вы знаете, как я могу подключить Activity, запущенную из startActivityForResult - person kaiser; 03.03.2019
comment
конечно, здесь это очень хорошо объяснено stackoverflow.com/a/10407371/5906447 - person Sahil; 03.03.2019
comment
В моем случае намерение создано не мной. Намерение создается из newChooseAccountIntent (...) - person kaiser; 03.03.2019
comment
приведенный выше код должен быть написан в классе активности или диалогового окна, предоставьте дополнительную информацию на случай, если вы не можете получить доступ к этому классу непосредственно в своей базе кода. - person Sahil; 03.03.2019
comment
Извините, я не понимаю. Если я поставлю this.setFinishOnTouchOutside (false); прямо под моим верхним кодом, он не работает (мне кажется, это неправильная активность). Но я не могу установить действие для верхнего намерения. Намерение создается developers.google.com/android. / reference / com / google / android / gms /. - person kaiser; 03.03.2019
comment
Мой плохой приятель, это API Google, ты не сможешь справиться с этим так, как хочешь. Все, что вы можете сделать, это убедиться, что пользователь не сможет пройти через поток приложения, пока не выберет учетную запись. Поскольку вы не можете получить доступ к классу, вы не сможете изменить его свойство cancellabe. - person Sahil; 03.03.2019
comment
Спасибо за вашу помощь. Тогда мой вопрос остается открытым. Я не хочу заставлять пользователя выбирать учетную запись. Я просто хочу заставить его нажать ОК или ОТМЕНА. Это умственная вещь. Как и мой вопрос: на мой взгляд, слишком легко отменить этот диалог, иногда это происходит непреднамеренно, а затем диалог исчезает. Если они нажмут "Отмена", меня это устроит. Также нет разницы между отменой и щелчком по диалоговому окну ... - person kaiser; 03.03.2019