2010-07-26 33 views
10

Có một số ứng dụng khác thực hiện việc này, như Twitter, Facebook hoặc thậm chí các ứng dụng gốc như Android Market. Khi bạn muốn hiển thị danh sách các mục được truy xuất từ ​​internet, điều này trông giống như một cách tiêu chuẩn để hiển thị cho người dùng một số thông báo về hành động đang diễn ra. Đây là một màn hình nền màu trắng với một bánh xe quay động và một văn bản "Đang tải ...".Cách hiển thị văn bản "Đang tải ..." khi truy xuất các mục cho một ListView

Có ai đó biết cách thực hiện việc này không?

Tôi đã có thể làm điều gì đó tương tự với mã này, nhưng tôi chưa thích nó quá nhiều. Vẫn làm việc cơ bản dở dang:

<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..." /> 

Trả lời

5

Khi người dùng cuộn xuống dưới, getView của bộ điều hợp sẽ trả lại chế độ xem với văn bản "Đang tải .." và tiến trình quay. Đồng thời AsyncTask hoặc chủ đề nền nên được bắt đầu tải xuống một đoạn nội dung mới. Khi nội dung sẵn sàng adapter.notifyDatasetChanged() được gọi và ListView sẽ hiển thị lại tất cả nội dung bao gồm các mục mới.

Thông báo "Đang tải ..." chỉ là một mục cuối cùng trong ListView.

+0

Hey Fedor! (aka "người đàn ông đã giải quyết lỗi OOM"). Tôi thích câu trả lời của bạn hơn. Bạn có một đoạn cho điều đó không ?. Nếu không, tôi nghĩ rằng tôi có thể tìm ra nó ... – ggomeze

+0

Xin lỗi, không có đoạn trích. Tôi chỉ sử dụng cách tiếp cận này trong các dự án của tôi và nó hoạt động tốt. Tôi đoán Market làm điều gì đó như thế. – Fedor

+0

Tôi đã tìm thấy phương thức setEmptyView thú vị của ListView. Ở đó bạn có thể thêm tiện ích thanh tiến trình với văn bản. Tôi đã không làm cho nó hoạt động hoàn hảo chưa ... :-( – ggomeze

7

Đó là thực hiện với sự giúp đỡ của AsyncTask (một chủ đề backround thông minh) và ProgressDialog

Khi AsyncTask bắt đầu chúng tôi reaise một progressdialog với trạng thái không xác định, một khi công việc kết thúc, chúng tôi sa thải hộp thoại.

Ví dụ mã
gì adapter làm trong ví dụ này là không quan trọng, quan trọng hơn để hiểu rằng bạn cần phải sử dụng AsyncTask để hiển thị một hộp thoại cho sự tiến bộ.

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

Ops, hoặc tôi đã không expla trong bản thân mình, hoặc tôi không chắc tôi hiểu câu trả lời của bạn. Tôi không muốn hiển thị hộp thoại, nhưng là một dạng xem văn bản, như được hiển thị trên Android Market làm ví dụ. Ngoài ra Twitter, hoặc Facebook sử dụng cùng một TextView. Bạn đã thấy rằng với màn hình với tải ... xem văn bản tập trung vào nó ?. Cảm ơn bạn đã trả lời mặc dù – ggomeze

+0

Xin lỗi, thần này tôi bối rối 'Đây là một màn hình nền màu trắng với một bánh xe quay hoạt hình và một" Đang tải ... "' – Pentium10

3

Tôi không biết liệu nó sẽ hoàn toàn phù hợp với yêu cầu của bạn, cách đơn giản là chỉ cần thiết lập các văn bản tải ban đầu để android-trống-id-view như

<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" /> 

và nếu không có mục danh sách được tìm thấy sau đó thiết lập android-trống-id-view để thông điệp khác nhau trong async callback

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

nó sẽ cung cấp đủ dấu hiệu để người dùng rằng cái gì là danh sách progressing..ie đang tải

Các vấn đề liên quan