由于您没有代码示例,因此我不确定您正在加载哪种数据以及如何根据数据动态配置 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 布局,并使用异步任务加载数据并将其保存在您定义的某些数据结构中,并在使用 setContentView 后使用该数据结构在 onPostExecute() 中加载您的 UI 元素() 更改回您的主布局。
特别注意:使用上面的代码,如果您旋转屏幕,它将再次显示启动屏幕并重新加载所有数据。如果您想避免这种情况,您可以使用 onSaveInstanceState() 并在 outBundle 中保存您想要的任何数据,然后在 onCreate 的 savedInstanceState 包中读回该数据并重新加载 UI 元素。如果您想了解有关处理旋转的更多信息,这将需要一个单独的线程(或者您可以只搜索它)。