我正在使用View Pager在活动中显示3个片段(Dashboard.java)。单击上一个活动(Login.java)上的按钮后加载活动,其中两个片段显示从服务器获取的列表视图。
问题是从服务器获取数据至少需要3-7秒才能填充为listview。所以我想显示一个ProgressDialog来显示加载状态。
我已尝试使用AsyncTask从片段中的服务器加载数据。它可以工作,但它只在一段时间后显示ProgressDialog,只是在填充列表之前的一秒钟。此外,单击BUTTON以加载主Activity(Dashboard.java)
会有延迟所以有两个问题: 1.进度对话框出现得很晚 2.上一个活动(Login.java)延迟到MainActivity(Dashboard.java)(有时显示黑屏)
这是我在片段中的AsyncTask
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPostExecute(Void result) {
pd.dismiss();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
pd.show();
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_ID, parser.getValue(e, KEY_ID)); // id not using any
// where
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
// adding HashList to ArrayList
menuItems.add(map);
}
return null;
}
}.execute();
实际上我应该在MainActivity(Dashboard.java)或Fragment.java上使用ProgressDialog? 请引导我走正确的道路。
修改 实际上,使用进度对话框加载片段的最佳方法是什么? (片段是从服务器填充的listview)
答案 0 :(得分:1)
可能有两种解决方案..
在您从 Login.java 活动中启动 Dashboard.java 时启动AsyncTask
,并将启动活动代码放在{{1}上} onPostExecute()
。当有完整的碎片数据时,这将帮助您加载 Dashboard.java 活动。
在 Dashboard.java 的AsyncTask
中启动AsyncTask。并在AsyncTask的onCreate()
中显示 ProgressDailog 并取消onPreExecute()
,但为此您有一些onPostExecute()
片段,因此用户无法看到 Dashboard.java 活动。
答案 1 :(得分:0)
没关系,在doInBackground()
旁边写一个方法是我的错