我正在使用TabActivity
和4个单独的Activities
- 每个标签一个。
其中一个Activities
是ListView
,其中包含自定义ArrayAdapter
。
问题是,当我按Tab键切换到此视图时,Activity
会在视图更改之前加载内容,这似乎在xml
之前几秒内没有任何反应加载和解析等。
我找了一个例子,但这是我的第一个Android应用程序,我很难理解这个流程。
任何人都可以指向一些代码,这些代码可以让我在后台线程中加载内容时立即更改视图(我可以通知用户内容正在加载)
谢谢
编辑 - 我正在从现有的iOS应用程序移植代码 - 我无法更好地阐明问题,因为我没有意识到在这种情况下如何阻止UI线程,并且由于其复杂性现有代码和截止日期我不想太多改变结构。在我看到你的代码Jennifer之前,我缩小了问题,但这是我使用的解决方案,所以我将你的标记视为正确。
这是我使用的,如果它可以帮助其他人,我必须把我调用的函数触发数据加载到后台线程,然后在该线程完成其工作时显示内容
这个类是在我的
中声明的public class TableView extends ListActivity
在我之前没有做到这一点之前我很难理解;)
public class GetContentTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog pdialog;
@Override
protected void onPreExecute(){
super.onPreExecute();
pdialog = new ProgressDialog(TableView.this);
pdialog.setTitle(progressDialogTitle);
pdialog.setMessage(progressDialogMessage);
pdialog.show();
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
setUpAndLoadList(); // the function to display the list and fill it with content
pdialog.dismiss();
}
@Override
protected Void doInBackground(Void... params) {
doInitialLoad(); // The function to load any xml data from server
return null;
}
}
答案 0 :(得分:0)
使用AsyncTask,或(可能)使用单独的线程。
http://developer.android.com/reference/android/os/AsyncTask.html
我也会投入2美分并说不要使用TabActivity。只需拥有自己看起来像标签的按钮,但这对于这个主题并不是很重要。
答案 1 :(得分:0)
您可以使用进度对话框(可以通知用户内容正在加载)
ProgressDialog dialog;
private class XMLOperation extends AsyncTask<String, Void, String> {
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
System.out.println("onPreExecute");
dialog= ProgressDialog.show(mContext, "", "Loading Content....");
dialog.setCancelable(false);
}
@Override
protected String doInBackground(String... urls) {
//do your Background task
}
protected void onPostExecute(String result) { //dismiss dialog
try {
if(dialog.isShowing()){
dialog.dismiss();
}
} catch (Exception exception) {
dialog.dismiss();
}
}