Android 如何显示";“正在加载…”;为ListView检索项目时的文本
还有其他一些应用程序也在这样做,比如Twitter、Facebook,甚至是Android Market等本地应用程序。当您希望显示从internet检索的项目列表时,这看起来像是向用户显示有关正在进行的操作的一些通知的标准方式。这是一个白色背景屏幕,带有动画旋转轮和“加载…”文本 有人知道怎么做吗 我已经能够用这段代码做一些类似的事情,但我还不太喜欢它。仍在进行中的工作:Android 如何显示";“正在加载…”;为ListView检索项目时的文本,android,listview,uiview,loading,Android,Listview,Uiview,Loading,还有其他一些应用程序也在这样做,比如Twitter、Facebook,甚至是Android Market等本地应用程序。当您希望显示从internet检索的项目列表时,这看起来像是向用户显示有关正在进行的操作的一些通知的标准方式。这是一个白色背景屏幕,带有动画旋转轮和“加载…”文本 有人知道怎么做吗 我已经能够用这段代码做一些类似的事情,但我还不太喜欢它。仍在进行中的工作: <ListView android:id="@+id/post_list" android:layout_
<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..." />
这是在(智能回退线程)和 当AsyncTask启动时,我们重新启动一个状态不确定的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();
}
}
private类PrepareAdapter1扩展异步任务{
进程对话;
@凌驾
受保护的void onPreExecute(){
dialog=新建ProgressDialog(viewContacts.this);
setMessage(getString(R.string.please_wait_,while_loading));
对话框。setUndeterminate(true);
对话框。可设置可取消(false);
dialog.show();
}
/*(非Javadoc)
*@see android.os.AsyncTask#doInBackground(Params[])
*/
@凌驾
受保护的联系人列表光标或适配器doInBackground(无效…参数){
cur1=objItem.getContacts();
开始管理光标(cur1);
adapter1=新联系人列表光标或适配器(viewContacts.this,
R.layout.contact_for_listitem,cur1,新字符串[]{},新int[]{});
返回适配器1;
}
PostExecute上受保护的void(ContactsListCursorAdapter结果){
list.setAdapter(结果);
dialog.dismise();
}
}
当用户滚动到底部时,适配器的getView应该返回一个带有“Loading..”文本和旋转进度的视图。同时,应启动AsyncTask或后台线程来下载新的内容块。当内容准备就绪时,将调用adapter.notifyDatasetChanged(),ListView将重新显示包括新项在内的所有内容
所以“加载…”消息只是列表视图中的最后一项。我不知道它是否完全符合您的要求,简单的方法是将加载文本最初设置为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 Market上显示的那样。Twitter或Facebook也使用相同的文本视图。你有没有看到屏幕上有加载。。。以它为中心的文本视图?。谢谢你的回复,抱歉,这是一个白色的背景屏幕,有一个动画旋转的轮子和一个“加载…”嘿,Fedor!(又名“解决OOM错误的人”)。我更喜欢你的回答。你有关于这个的片段吗?。否则我想我能弄明白…对不起,没有片段。我只是在我的项目中使用这种方法,效果很好。我猜Market就是这样做的。我发现ListView的setEmptyView方法很有趣。在那里,您可以添加带有文本的process bar小部件。我还没把它做好…:-(我已经按照您的说明在我的应用程序中实现了它。。谢谢。。人们可以看到我的帖子。如何将此视图与getview方法中的其余元素分离?
((TextView) findViewById(android.R.id.empty)).setText("Your List is empty");