2011-04-13 39 views
0

我遇到一個問題,我有以下代碼:如何實現ProgresDialog [Android]產品

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); 
    } 
} 
} 

這是實際的代碼...我想這樣做在AsyncTaskpopulateCurrent();,同時我想加載屏幕中顯示...一直試圖幾個小時,但沒有實際成功...我已經成功顯示加載屏幕和文谷JSONArray,但無法更新列表視圖...

感謝您的支持!

+0

我想你缺少'super.onCreate(savedInstanceState);' – 2011-04-13 08:26:23

+0

你期望什麼行爲?要顯示父活動之前顯示的對話框? – rajath 2011-04-13 08:31:30

+0

是的,我希望它顯示在父活動之前... – 2011-04-13 08:46:14

回答

0

你可以等待活動的內容設置,直到你與進度對話框完成。

更新

這將在異步任務運行命令:

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(); 
    } 
} 

這很可能最好完全創建一個新列表並設置視圖來查看該列表。

+0

嗨...我還沒有設法做出任何進展,這就是爲什麼我更新問題部分中的代碼來顯示實際問題。 – 2011-04-13 12:10:50

+0

基於代碼:在將項目添加到列表之後(因爲您在填充列表之前創建適配器)之後,您需要注意列表視圖適配器。也;你確定你沒有在catch塊中結束;你使用'adb logcat'來查看你得到的消息嗎? – thoredge 2011-04-13 13:03:32

+0

不,沒有問題不在這個代碼中......這個工作很棒!我只是想在AsyncTask中加載並執行populateCurrent()..但不知道該怎麼做... – 2011-04-13 13:15:56

1

預期的行爲......

顯示一個對話框UI線程的典型任務,但要等到完成onCreate方法,在UI線程不是隨意執行對話框創建...

兩種解決方案:在單獨的線程中創建對話框或在單獨的線程中執行長期任務。

這裏的一些亮點: http://developer.android.com/guide/topics/ui/dialogs.html

+0

嘗試它,但我總是收到'不能創建處理程序內部線程沒有調用Looper.prepare()'...我將內容添加到ListView ... – 2011-04-13 10:07:14

+0

我已經添加了實際的代碼,如果你能幫助,我會感激.. – 2011-04-13 12:11:20