В настоящее время у меня есть кнопка, которая загружает активность.Ждите действия для отображения
Эта активность имеет ListView в ней, которая по какой-либо причине занимает довольно много времени для загрузки (не дожидаясь данных, данные уже находятся в памяти). Проблема в том, что пока он отображает список, пользовательский интерфейс ждет, где была нажата кнопка, и не меняет экран, пока список не будет полностью загружен.
Что бы я хотел, это отображать список только после того, как активность загружена, так что по крайней мере что-то произойдет, как только они нажмут кнопку (очень важный пользовательский интерфейс).
В настоящее время мой взломать решение этой проблемы - это создать поток, подождать 50 миллисекунд, а затем установить адаптер для моего списка (используя runOnUiThread). Конечно, если для загрузки некоторых устройств требуется более 50 мс, то для загрузки активности придется загрузить весь список.
Текущий соответствующий код:
@Override
public void onPostResume() {
super.onPostResume();
new Thread(new Runnable() {
@Override
public void run() {
final AdapterData data = getData();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
myAdapter = new MyAdapter(MyActivity.this, data);
lvMyList.setAdapter(myAdapter);
}
});
}
}).start();
}
Я просто изменил имена переменных в коде, но это не имеет значения. Это просто, чтобы вы могли увидеть мое общее решение.
Я чувствую, что должен быть какой-то обратный вызов, который называется, когда действие завершается созданием. Я думал, что onPostResume ждал завершения операции, но это не сработало. Он все еще висел.
В качестве первого решения, я хотел бы предложить, чтобы создать статический публичный Runnable переменную внутри запущенного деятельности, что вы можете выполнить, когда загрузка завершена. Это достаточно? –
Я не понимаю, что вы просите меня сделать. «что вы можете выполнить, когда загрузка закончилась». Моя проблема в том, что я не знаю, когда загрузка закончилась. Я знаю, как запустить runnable, как вы можете видеть в моем опубликованном решении. Моя проблема - это знать, когда ее выполнять, так как ожидания 50 мс кажутся очень ОЧЕНЬ плохим решением. – Cruncher
Простите, может быть, я не понимаю, когда именно в коде есть отставание. Вам нужно дождаться окончания getData()? Или это слишком долго для отображения после загрузки? На самом деле я пропущу точку, возможно ...:/ –