На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> Подсказки новичкам , Android
    Братцы! Зубры! Не пинайте больно...подскажите.
    Ваяю свою первую аппликацию под мой новый суперфон :blush: Тема такая: при запуске стартует т.н. MainActivity. На ней помимо всякой лабудени есть кнопочка, при нажатии на которую стартует SecondActivity. На ней имеется EditText(etNote) и баттон "Сохранить". Вводим текст в EditText и жмём баттон...Далее код:
    ExpandedWrap disabled
      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
    ExpandedWrap disabled
      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();
          }
      1. Информационные сообщения, которые гарантированно появятся только тогда, когда пользователь смотрит на экран (сразу после нажатия какой-то кнопки, к примеру) лучше делать toast'ами.
      2. Перед закрытием активити необходимо закрыть все открытые диалоги, которые были открыты в контексте данной активити. Иначе рискуешь потом словить эксепшен.
        AesmaDiv, выкладывай проект, подебажу, так сходу понять сложно.

        Но мелкий совет:

        ExpandedWrap disabled
          String title;
              if(param>0) title=getString(R.string.adTitleError); else title=getString(R.string.adTitleInfo);


        Не надо этого делать. setTitle да и все остальные методы отлично скушают id ресурса.

        ExpandedWrap disabled
          setTitle(param>0 ? R.string.adTitleError : R.string.adTitleInfo)


        Цитата Хрен @
        1. Информационные сообщения, которые гарантированно появятся только тогда, когда пользователь смотрит на экран (сразу после нажатия какой-то кнопки, к примеру) лучше делать toast'ами.

        Это ерунда полная.

        Цитата Хрен @
        2. Перед закрытием активити необходимо закрыть все открытые диалоги, которые были открыты в контексте данной активити. Иначе рискуешь потом словить эксепшен.

        Просто на онклике после обработки надо вызывать финиш.

        Добавлено
        AesmaDiv, да, ты finish() перенеси в алерт билдер. Да и вообще структура с трай кетч как то выглядит страшновато.
          Цитата Британский учёный @
          Это ерунда полная.

          Это не ерунда, а вопрос дизайна и дальнейшего геморроя. Алерты перед закрытием контекста надо закрывать. Тосты закроются сами. Плюс, тосты в описанном случае удобнее ;)
            Цитата Хрен @
            Это не ерунда, а вопрос дизайна и дальнейшего геморроя.

            Вообще то тосты обычно используют для отладки или для нотификейшенов, на которые можно забить.
            Цитата Хрен @
            Плюс, тосты в описанном случае удобнее

            Я так понял что ТС просто играется с СДК и хочет разобраться что к чему. Да, тост тут спрячет багу, так как активити закроется, а тост покажется, но саму причину того, что finish прописан не там это не пофиксает :) Так что скажем твёрдое нет авнокоду на начальной стадии развития!
              Цитата Британский учёный @
              или для нотификейшенов, на которые можно забить.

              ...или для нотификейшенов, которые юзер стопудово увидит и на которые не нужна реакция юзера. Нам нужно всего лишь проинформировать его, что поле не заполнено =)

              Цитата Британский учёный @
              саму причину того, что finish прописан не там это не пофиксает

              Да там он стоит, ему просто после каждого showMessage нужно return делать, потому что оно месседж показывает и сразу finish вызывает. А в onClick нужно добавить dialog.dismiss().
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0772 ]   [ 15 queries used ]   [ Generated: 11.12.24, 15:47 GMT ]