1

我正在使用TabActivity和4個單獨的Activities - 每個選項卡一個。在使用TabActivity顯示之前,活動從服務器加載xml

其中一個ActivitiesListView,有一個自定義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

什麼叫「如何附上一個ArrayAdapter和回來的內容」 – jennifer

回答

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

謝謝詹妮弗,我喜歡對話的檢查.isShowing() – craigk

+0

歡迎craigk :) – jennifer

0

使用的AsyncTask,或(possib ly)一個單獨的線程。

http://developer.android.com/reference/android/os/AsyncTask.html

我也扔在我的2美分,說不要使用TabActivity。只要有你自己的按鈕,看起來像標籤,但這不是真正關鍵的這個話題。

+0

感謝您的回答是說,我希望得到一些示例代碼,我已經查看了鏈接,但不確定如何將它附加到ArrayAdapter以及返回代碼的內容 – craigk

+0

。我會建議你一樣的(郵政編碼)。在這裏飛盲。 –

相關問題