由於你沒有你的代碼的例子,我不知道你正在加載什麼樣的數據,以及如何根據數據動態地配置UI,但我會盡量回答我可以。結果,答案可能聽起來有點通用。
首先,定義2個佈局xml文件 - 一個用於啓動畫面,另一個用於「主」活動。 所以你會/res/layout/splash_screen.xml結束和/res/layout/main.xml
在你的onCreate(),加載splash_screen佈局:
setContentView(R.layout.splash_screen);
在您的異步任務,你將加載你需要做的任何數據,並且你將把所有的數據保存在某種數據結構中。例如,我會使用String的LinkedList。
private class MyTask extends AsyncTask<Uri, Integer, List<String>> {
@Override
protected List<String> doInBackground(Uri... params) {
List<String> myList = new LinkedList<String>();
// load up the list with data you are trying to get
myList.add("foo");
myList.add("bar");
// whatever you return here will be passed in as a parameter to the onPostExecute()
return myList;
}
@Override
protected void onPostExecute(List<String> result) {
setContentView(R.layout.main2);
// set layout elements with data that from the result
TextView myTextView = (TextView) findViewById(R.id.some_label);
myTextView.setText(result.get(0));
// or just call some function you defined in your activity instead
}
}
所以基本上,有2個不同的佈局文件,並使用splash_screen佈局,並使用異步任務負載的數據並將其保存在您定義的一些數據結構,並使用該數據結構來加載UI元素在使用setContentView()更改回主佈局之後,在onPostExecute()中。
一個特別注意事項: 使用上面的代碼,它將再次顯示啓動畫面,如果旋轉屏幕,將重新載入所有數據。如果您想避免這種情況,您可以使用onSaveInstanceState()並將所需的任何數據保存到outBundle中,並將該數據讀回到onCreate的savedInstanceState捆綁包中並加載UI元素。如果你想知道更多關於處理旋轉的信息,這將需要一個單獨的線程(或者你可以搜索它)。
對不起,我無法提供任何代碼,因爲我已簽署了禁止我共享代碼的NDA。儘管我可以談論一般性問題。我基本上根據條件加載了一個xml,並且該xml文件告訴我需要顯示哪些圖像以及與該圖像關聯的信息。我會從返回的圖像列表中動態創建圖像視圖,並將它們添加到視圖中。在屏幕上出現所有內容(包含大量圖片)之前,需要花費2-3秒鐘,因此我希望顯示一個閃屏,直到所有內容都已加載並準備好與之交互爲止。 – romamnmlst
在這種情況下,我認爲您可以在上面的doInBackground()函數中解析XML文件,創建ImageView並設置圖像源,並從doInBackground()函數返回ImageView列表。 onPostExecute()函數將獲取ImageView的列表,並將它們添加到setContentView()之後的視圖層次結構中。您在onPostExecute()中執行的任何操作都在主線程中運行,因此您可以從此處修改UI元素。 – hiBrianLee
非常好,我會給你一個鏡頭,看看它是如何工作的。謝謝! (可能需要一段時間,但如果有效,我一定會回來並將您的答案標記爲已接受) – romamnmlst