Я пытаюсь заставить мой пользовательский интерфейс реагировать на события (например, нажатия кнопок, завершение потоков и т. Д.) В реальном времени в Android (очевидно).
У меня есть расположение кнопок, и одна из кнопок используется для копирования неизвестного количества файлов с удаленного компьютера по FTP. FTP-часть всего этого работает очень хорошо, но я просто не могу найти способ, чтобы дать пользователю знать о ситуации:
Состояния, как я их вижу:
1) Выбрал «Загрузить файлы» из «нормального» меню.
2) Pressed Confirm (процесс загрузки может быть довольно длительным, и, возможно, я не хочу выбирать его по ошибке - однако теперь это отдельная тема, поэтому, возможно, придется переосмыслить это.
3) Скачивание
4) Загрузка завершена, восстановление нормального меню
Одна из вещей, которые, я надеялся, сработает, это запустить код FTP в отдельном потоке и, используя конструкцию thread.isAlive (), дождаться завершения потока и соответствующим образом изменить отображение.
Единственное, что я не смог сделать, это показать, что файлы загружаются. Независимо от того, что я пытаюсь сделать, дисплей переходит из представления «Подтверждение загрузки» в представление «Нормальное меню». (Обратите внимание, что это не виды, так как Android определяет их в любом случае.)
Код следует:
Btn.setOnClickListener (new View.OnClickListener()
{
@Override
public void onClick (View v)
{
hideTempWidgets();
Btn01.setVisibility (View.GONE);
Btn02.setVisibility (View.GONE);
Btn03.setVisibility (View.GONE);
verfBtn.setVisibility (View.VISIBLE);
verfBtn.setText ("Press to Verify");
verfBtn.setOnClickListener (null);
verfBtn.setOnClickListener (new View.OnClickListener()
{
@Override
public void onClick (View v)
{
runOnUiThread (new Runnable()
{
public void run()
{
verfBtn.setText ("Downloading...");
}
});
Thread temp = new Thread (new Runnable()
{
public void run()
{
try
{
FileTransfer.getFiles (getAddr().trim());
}
catch (SQLException e)
{ }
}
}, "ftp");
temp.start();
while (temp.isAlive());
verfBtn.setVisibility (View.GONE);
Btn01.setVisibility (View.VISIBLE);
Btn02.setVisibility (View.VISIBLE);
Btn03.setVisibility (View.VISIBLE);
alert (true, VIBE_BLIP);
}
});
}
});
Кто-нибудь сталкивался с этим и придумал достойное решение ??
Что не происходит, так это setText на «Загрузка ...», или, по крайней мере, если да, не тогда, когда я этого хочу, и слишком быстро, чтобы увидеть ... Наконец, особенно расстраивает то, что эта команда работает правильно, когда я удаляю код для запуска потока FTP.
Спасибо,
Р.