我遇到了一个问题,我有以下代码:
public void onCreate(Bundle savedInstanceState) {
MyDialog = ProgressDialog.show(this, "Nalagam kanale" , "Prosimo počakaj ... ", true);
MyDialog.show();
... }
实际上应该开始对话......但问题是当所有内容都被加载时会显示对话框...
我该如何解决?
实际代码
package com.TVSpored;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
public class Currently extends Activity{
static final int PROGRESS_DIALOG = 0;
private ArrayList<CurrentlyItem> currentItems;
private CurrentAdapter aa;
private ListView currentListView;
private JSONArray CurrentShows;
private Communicator CommunicatorEPG;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.layout_currently);
CommunicatorEPG = new Communicator();
currentItems = new ArrayList<CurrentlyItem>();
if(currentItems == null)
int resID = R.layout.current_item;
aa = new CurrentAdapter(this, resID, currentItems);
currentListView = (ListView)findViewById(R.id.currentListView);
try {
currentListView.setAdapter(aa);
} catch (Exception e) {
Log.d(" * Napaka", e.toString());
}
try {
populateCurrent();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void populateCurrent() throws JSONException
{
CurrentShows = CommunicatorEPG.getCurrentShows(0);
for (int i = 0; i < CurrentShows.length(); i++)
{
JSONObject jsonObject = CurrentShows.getJSONObject(i);
String start = jsonObject.getString("1");
Integer duration = jsonObject.getInt("2");
String title = jsonObject.getString("3");
String epg_channel = jsonObject.getString("4");
String channel_name = jsonObject.getString("5");
CurrentlyItem newItem = new CurrentlyItem(1, 2, 3, 4, 5);
currentItems.add(i, newItem);
}
}
}
这是实际代码...我想在populateCurrent();
中AsyncTask
进行同时我希望显示加载屏幕...现在已经尝试了几个小时但没有实际成功...我已成功显示加载屏幕并通过JSONArray
,但无法更新列表视图......
感谢您的支持!
答案 0 :(得分:1)
预期的行为......
显示对话框是UI线程的典型任务,但在完成onCreate方法之前,UI线程无法自由执行对话框创建...
两个解决方案:在单独的线程中创建对话框或在单独的线程中执行长任务。
这里有一些亮点: http://developer.android.com/guide/topics/ui/dialogs.html
答案 1 :(得分:0)
您可以等到设置活动的内容,直到完成进度对话框。
<强>更新强>:
这将在async-task中运行您的命令:
new AsyncTask<Void, Void, Void> {
protected Long doInBackground(Void... voids) {
populateCurrent();
}
}.execute()
然而,您可能必须确保再次更新GUI线程中的列表,并以某种方式告诉适配器列表已更新(因为您已将该列表提供给适配器):
runOnUiThread(new Runnable() {
public void run() {
currentItems.add(i, newItem);
aa.notifyDataSetChanged();
}
}
最好完全创建一个新列表并设置视图以查看该列表。