2010-07-26 24 views
10

還有一些其他應用程序正在執行此操作,例如Twitter,Facebook或甚至原生應用程序,如Android Market。當您想要顯示從互聯網檢索到的項目列表時,這看起來像是一種向用戶顯示有關正在進行的操作的通知的標準方式。這是一個白色背景屏幕,帶有一個動畫旋轉輪和一個「加載...」文本。如何在檢索ListView的項目時顯示「正在加載...」文本

有人知道如何做到這一點嗎?

我已經能夠用這段代碼做類似的事情,但我不太喜歡它。在進行的工作:

<ListView android:id="@+id/post_list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

    <TextView android:id="@android:id/loading" 
     android:background="@color/white" 
     android:layout_width="fill_parent"  
     android:layout_height="fill_parent" 
     android:gravity="center" android:text="Loading..." /> 

回答

5

當用戶滾動到下您的適配器的getView應該返回一個視圖與「中..」文字和甩幹過程。與此同時,應啓動下載新內容的AsyncTask或後臺線程。當內容準備好時,adapter.notifyDatasetChanged()被調用,ListView重新顯示包括新項目的所有內容。

所以「加載...」消息只是ListView中的最後一項。

+0

嘿Fedor! (又名「解決了OOM錯誤的人」)。我有點更喜歡你的答案。你有這樣的片段嗎?否則,我想我可以弄明白... – ggomeze 2010-07-26 10:35:17

+0

對不起,沒有片段。我只是在我的項目中使用這種方法,它工作正常。我猜市場就是這樣的。 – Fedor 2010-07-26 12:08:36

+0

我發現有趣的ListView的setEmptyView方法。在那裏你可以添加一個文本的進程欄小部件。我還沒有完成它的工作,但... :-( – ggomeze 2010-07-26 13:48:47

7

這與AsyncTask幫助(智能底色線程)和ProgressDialog

當的AsyncTask開始我們reaise具有不確定狀態的progressdialog,一旦任務完成後,我們辭退完成對話框。

示例代碼
什麼適配器確實在這個例子就明白了,你需要使用的AsyncTask以顯示該進程的對話框並不重要,更重要的。

private class PrepareAdapter1 extends AsyncTask<Void,Void,ContactsListCursorAdapter > { 
    ProgressDialog dialog; 
    @Override 
    protected void onPreExecute() { 
     dialog = new ProgressDialog(viewContacts.this); 
     dialog.setMessage(getString(R.string.please_wait_while_loading)); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#doInBackground(Params[]) 
    */ 
    @Override 
    protected ContactsListCursorAdapter doInBackground(Void... params) { 
     cur1 = objItem.getContacts(); 
     startManagingCursor(cur1); 

     adapter1 = new ContactsListCursorAdapter (viewContacts.this, 
       R.layout.contact_for_listitem, cur1, new String[] {}, new int[] {}); 

     return adapter1; 
    } 

    protected void onPostExecute(ContactsListCursorAdapter result) { 
     list.setAdapter(result); 
     dialog.dismiss(); 
    } 
} 
+0

行動,或者我沒有expla在我自己正確,否則我不知道我明白你的答案。我不想顯示對話框,而是顯示一個文本視圖,例如它在Android電子市場中顯示。 Twitter或Facebook也使用相同的TextView。你有沒有看到與屏幕加載...文本視圖居中呢?感謝您的回覆,雖然 – ggomeze 2010-07-26 10:28:39

+0

對不起,這個神我困惑'這是一個白色的背景屏幕,一個動畫的紡車和一個「Loading ...」' – Pentium10 2010-07-26 10:32:37

3

,我不知道是否會完全符合你要求的,簡單的辦法就是設置加載文本最初到Android空ID的數據視圖像

<TextView 
     android:id="@android:id/empty" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:text="Loading... Please Wait" 
     android:textSize="20dip" /> 

,如果沒有列表項找到接盤Android的空ID的數據視圖,以不同的消息在異步回調

((TextView) findViewById(android.R.id.empty)).setText("Your List is empty"); 

將用戶的東西是progressing..ie名單給予足夠的指示加載

相關問題