目前我有一個加載活動的按鈕。等待活動顯示
該活動有一個ListView,無論何種原因需要相當長的時間來加載(不等待數據,數據已在內存中)。問題在於,在呈現列表時,UI正在等待按鈕被點擊的位置,並且在列表完全加載之前不會更改屏幕。
我想要的是,只有在活動加載完畢後才顯示列表,所以只要按下按鈕(響應式UI很重要),至少會發生一些事情。
目前,我解決這個問題的方法是產生一個線程,等待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的變量,當加載完成後,你可以執行。夠了嗎? –
我不明白你要求我做什麼。 「在加載完成時你可以執行」。我的問題是,我不知道什麼時候加載完成。我知道如何啓動一個可運行的,就像我在發佈的解決方案中看到的那樣。我的問題是知道什麼時候執行它,因爲等待50毫秒感覺像是一個非常糟糕的解決方案 – Cruncher
對不起,也許我不知道什麼時候完全在代碼中的滯後。你是否必須等待getData()結束?或者加載後顯示時間過長?我實際上錯過了這一點,可能是......:/ –