代码之家  ›  专栏  ›  技术社区  ›  ggomeze

如何在检索ListView项时显示“正在加载…”文本

  •  10
  • ggomeze  · 技术社区  · 14 年前

    有人知道怎么做吗?

    我已经能够用这个代码做一些类似的事情,但是我还不太喜欢它。仍在进行中:

    <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..." />
    
    3 回复  |  直到 8 年前
        1
  •  5
  •   Fedor    14 年前

    当用户滚动到底部时,适配器的getView应该返回一个带有“Loading..”文本和旋转进度的视图。同时,应该启动异步任务或后台线程来下载新的内容块。当内容准备就绪时,将调用adapter.notifyDatasetChanged(),ListView将重新显示包括新项在内的所有内容。

    所以“正在加载…”消息只是ListView中的最后一项。

        2
  •  7
  •   Pentium10    14 年前

    这是在他的帮助下完成的 AsyncTask (一种智能的背面螺纹)和 ProgressDialog

    示例代码

    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();
        }
    }
    
        3
  •  3
  •   Balaji    13 年前

    我不知道它是否会完全符合您的要求,简单的方法就是将加载文本初始设置为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");