Код слушателя onClick не показывает тосты - PullRequest
0 голосов
/ 21 июля 2011

У меня есть простая раскладка с использованием 3 кнопок.У меня есть слушатель на первой кнопке.Он вызывается, как и ожидалось, по клику.Слушатель проверяет несколько вещей, возможно загружает несколько файлов, затем запускает другое действие.

Во время загрузки файла я хотел бы сообщить пользователю, что загрузка продолжается.Я попробовал обычные подозреваемые, но я увидел, что использование ProgressBar будет много кода.Поэтому я попробовал что-то меньшее: я использовал Toast для отображения сообщения, затем отключил 3 кнопки для продолжительности загрузки.Это код:

int version_pre = getCurrentVersion();

//Check files on remote server
String URL = Data._URL + "/" + Data.OWNER + "/version";
if(!this.downloadFile(URL, "version")) {
  Toast.makeText(this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show();
}

int version_post = getCurrentVersion();
if(version_pre != version_post) { //Neu Dateien besorgen
  Button b1 = (Button)findViewById(R.id.btn_Prospekt);
  b1.setEnabled(false);
  b1 = (Button)findViewById(R.id.btn_Einheitenumrechner);
  b1.setEnabled(false);
  b1 = (Button)findViewById(R.id.btn_Sonstiges);
  b1.setEnabled(false);

  Toast.makeText(this, "Aktualisierung der Dateien wird gestartet.", Toast.LENGTH_LONG).show();

  if(!fetchAllFiles()) {
    Toast.makeText(this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show();
  }

  b1 = (Button)findViewById(R.id.btn_Prospekt);
  b1.setEnabled(true);
  b1 = (Button)findViewById(R.id.btn_Einheitenumrechner);
  b1.setEnabled(true);
  b1 = (Button)findViewById(R.id.btn_Sonstiges);
  b1.setEnabled(true);
}

return "";

Проблема заключается в следующем: даже при отладке я не вижу, чтобы какой-либо механизм изменения графического интерфейса действительно что-то делал.Отключение кнопок должно выделять их серым цветом.Это не так.Вызов Toast.maketext (). Show () должен отобразить сообщение.Это не так.

Я подозреваю, что это может быть ожидаемым поведением, поскольку оно касается нескольких механизмов.Есть ли ограничение в отношении того, что я могу вызвать в слушателе действий, который изменит интерфейс?Нужно ли вызывать метод refresh () своего рода при изменении пользовательского интерфейса во время прослушивания?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 21 июля 2011

попробуйте это ...

Toast.makeText(activityname.this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show();
0 голосов
/ 21 июля 2011

Я не вижу, где вы на самом деле настраиваете onClickListener, после того, как у вас есть ссылка на вашу кнопку.Это должно выглядеть примерно так:

b1.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {                   
                Toast.makeText(mContext, mContext.getString(R.string.error), Toast.LENGTH_LONG).show();
                }
            }               
        });

Кроме того, вы используете одну и ту же ссылку на объект b1 для разных кнопок, поэтому будет работать только последняя.

0 голосов
/ 21 июля 2011

Вы должны добавить .show() в строки, где вы вызываете Toast, в противном случае вы просто создаете сообщение, не отображая его.

Для слушателей, убедитесь, что вы выполняете все изменения GUI (кроме сообщений Toast) в потоке пользовательского интерфейса (см. Также этот пост )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...