Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.212.95] |
|
Сообщ.
#1
,
|
|
|
Братцы! Зубры! Не пинайте больно...подскажите.
Ваяю свою первую аппликацию под мой новый суперфон Тема такая: при запуске стартует т.н. MainActivity. На ней помимо всякой лабудени есть кнопочка, при нажатии на которую стартует SecondActivity. На ней имеется EditText(etNote) и баттон "Сохранить". Вводим текст в EditText и жмём баттон...Далее код: public void OnClickSave(View view)throws Exception{ if(etNote.length()==0){ showMessage(getString(R.string.adMesFileEmpty),0); return; } if(new File(fullPath).exists()){ showMessage(getString(R.string.adMesFileExist),0); new File(fullPath).delete(); } try{ Writer output = new BufferedWriter(new FileWriter(fullPath)); output.write(etNote.getText().toString()); output.close(); }catch(Exception e){ showMessage(getString(R.string.adMesFileError)+":\n"+e, 1); } finish(); } Суть: Если поле ввода пустое выдаётся сообщение, что мол сохранять то нечего, и мы остаёмся на этой activity. Если поле не пустое проверяется есть ли уже файл с таким именем (тут всё хоккей) и если таки есть - выводится соответствующее сообщение, файлик стирается и создается новый. После чего activity закрывается и мы возвращаемся на MainActivity. Проблема в следующем: вывод сообщения реализуется при помощи AlertDialog с PositiveButton. И по идее перед завершением activity надо бы дождаться нажатия на эту самую PositiveButton, ан нет. Сообщение только мелькнет и activity сворачивается. Или я не в ту сторону дую? зы. Код showMessage public void showMessage(String message, int param){ String title; if(param>0) title=getString(R.string.adTitleError); else title=getString(R.string.adTitleInfo); new AlertDialog.Builder(this) .setTitle(title) .setMessage(message) .setPositiveButton(getString(R.string.adButtonPos), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { return; } }) .show(); } |
Сообщ.
#2
,
|
|
|
1. Информационные сообщения, которые гарантированно появятся только тогда, когда пользователь смотрит на экран (сразу после нажатия какой-то кнопки, к примеру) лучше делать toast'ами.
2. Перед закрытием активити необходимо закрыть все открытые диалоги, которые были открыты в контексте данной активити. Иначе рискуешь потом словить эксепшен. |
Сообщ.
#3
,
|
|
|
AesmaDiv, выкладывай проект, подебажу, так сходу понять сложно.
Но мелкий совет: String title; if(param>0) title=getString(R.string.adTitleError); else title=getString(R.string.adTitleInfo); Не надо этого делать. setTitle да и все остальные методы отлично скушают id ресурса. setTitle(param>0 ? R.string.adTitleError : R.string.adTitleInfo) Цитата Хрен @ 1. Информационные сообщения, которые гарантированно появятся только тогда, когда пользователь смотрит на экран (сразу после нажатия какой-то кнопки, к примеру) лучше делать toast'ами. Это ерунда полная. Цитата Хрен @ 2. Перед закрытием активити необходимо закрыть все открытые диалоги, которые были открыты в контексте данной активити. Иначе рискуешь потом словить эксепшен. Просто на онклике после обработки надо вызывать финиш. Добавлено AesmaDiv, да, ты finish() перенеси в алерт билдер. Да и вообще структура с трай кетч как то выглядит страшновато. |
Сообщ.
#4
,
|
|
|
Цитата Британский учёный @ Это ерунда полная. Это не ерунда, а вопрос дизайна и дальнейшего геморроя. Алерты перед закрытием контекста надо закрывать. Тосты закроются сами. Плюс, тосты в описанном случае удобнее |
Сообщ.
#5
,
|
|
|
Цитата Хрен @ Это не ерунда, а вопрос дизайна и дальнейшего геморроя. Вообще то тосты обычно используют для отладки или для нотификейшенов, на которые можно забить. Цитата Хрен @ Плюс, тосты в описанном случае удобнее Я так понял что ТС просто играется с СДК и хочет разобраться что к чему. Да, тост тут спрячет багу, так как активити закроется, а тост покажется, но саму причину того, что finish прописан не там это не пофиксает Так что скажем твёрдое нет авнокоду на начальной стадии развития! |
Сообщ.
#6
,
|
|
|
Цитата Британский учёный @ или для нотификейшенов, на которые можно забить. ...или для нотификейшенов, которые юзер стопудово увидит и на которые не нужна реакция юзера. Нам нужно всего лишь проинформировать его, что поле не заполнено =) Цитата Британский учёный @ саму причину того, что finish прописан не там это не пофиксает Да там он стоит, ему просто после каждого showMessage нужно return делать, потому что оно месседж показывает и сразу finish вызывает. А в onClick нужно добавить dialog.dismiss(). |