Страница 1 из 1

Как правильно вызвать диалог при запуске приложения?

Добавлено: 24 апр 2013, 10:18
jBee
Требуется при запуске приложения перед показом основной активити, вызвать окно ввода логина и пароля. Как это сделать правильно?
Я думаю вызвать диалог в методе onCreate в самом начале, и если скажем логин и пароль неправильные то сразу закрывать приложение.

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 24 апр 2013, 10:39
Foenix
как сделаешь так и будет для тебя правильно.
Я делаю в onCreate, ниче такого, все довольны. Только не забудь запретить закрытие диалога по кнопке назад и тач вне диалога, чтоб он тоже не закрылся.

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 24 апр 2013, 11:56
jBee
Ну в принципе ведь можно не запрещать закрытие диалога, просто когда проверяешь возвращаемые из него данные то в случае неправильного ответа соответственно реагировать.
А как запрещается закрытие диалога и тач вне диалога? В свойствах самого компонента?

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 24 апр 2013, 12:04
neoksi
Я лично сделал по другому.
Есть у меня прозрачная активити, которая является главной для приложения. У неё в onCreate делается проверка есть ли авторизованная учетная запись, если нет, то она вызывает активити логина и сама закрывается, если есть, то вызывается активити приложения и опять же себя закрывает.

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 24 апр 2013, 12:08
Foenix
я не запрещаю закрытие, у него две кнопки есть - ок, кансел. ПО канселу просто закрываетс приложение, а в случае неправильного ответа диалог показывается опять.

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 24 апр 2013, 21:35
jBee
Сделал диалог и есть проблема - он вызывается на экран, но приложение продолжает выполнять код после вызова, а надо чтобы ждало завершения диалога. Вот код:

[syntax=java]
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_courier_main);

// Login dialog
showLogin();

// здесь код который выполняется сразу после вывода диалога
// надо чтобы выполнение продолжилось после нажатия кнопок в диалоге (т.е. после закрытия диалога)
...
}

// Код формирования диалога
String user, pwd;

private void showLogin() {
// TODO Auto-generated method stub
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
final LinearLayout ln = new LinearLayout(this);
ln.setOrientation(1);
ln.setDividerPadding(5);
final EditText etUser = new EditText(this);
final EditText etPwd = new EditText(this);

ln.addView(etUser);
ln.addView(etPwd);

alert.setView(ln);

alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
user = etUser.getText().toString().trim();
pwd = etPwd.getText().toString().trim();
Toast.makeText(getApplicationContext(), user,
Toast.LENGTH_SHORT).show();
}
});

alert.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
alert.show();
}
[/syntax]

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 24 апр 2013, 21:40
neoksi
Вынеси код в отдельный метод и выполняй при положительном ответе диалога.

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 24 апр 2013, 22:01
Foenix
В том-то и дело, что в данных программах все примерно так же, поэтому как уже упоминалось, код будет непривычным - кусочками.
Поэтому имхо пусть грузится все, можно просто притенить это какой-то картинкой, или сделать прозрачную активити. В кусочках кода, когда логика прыгает - потом сложно разобраться. Например, если вы будете проверять пароль, обращаясь на сервер, то будут еще куски.. Оно все равно так будет, просто имхо для начинающего лучше, когда таких разрывов меньше..

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 25 апр 2013, 03:44
neoksi
Olivka
Зато когда привыкнешь к таким вот кусочкам, сложно удержаться от повторения их в других языках ;)

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 25 апр 2013, 09:53
jBee
neoksi писал(а):Я лично сделал по другому.
Есть у меня прозрачная активити, которая является главной для приложения. У неё в onCreate делается проверка есть ли авторизованная учетная запись, если нет, то она вызывает активити логина и сама закрывается, если есть, то вызывается активити приложения и опять же себя закрывает.
Диалоговые окна насколько я понял запускаются в отдельной нити (потоке), что было несколько неожиданно. И простого способа заставить UI поток ждать возврата из диалога я пока не нашел.

Как сделать чтобы активити себя закрывала? Т.е. активити логина - ввели данные, запускаем активити приложения с передачей данных логина, а активити логина закрываем - как делается закрытие?

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 25 апр 2013, 10:33
neoksi
Просто после вызова другого активити следующей строкой пишем finish();

Re: Как правильно вызвать диалог при запуске приложения?

Добавлено: 25 апр 2013, 11:06
Foenix
neoksi писал(а):Просто после вызова другого активити следующей строкой пишем finish();
правильно, мы же его в другой теме так и не убедили
viewtopic.php?f=39&t=1891