我的应用程序中的所有列表视图都使用空属性来显示一个进度对话框,同时加载一些web内容:
<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"
android:id="@android:id/empty" android:gravity="center">
<ProgressBar android:id="@+id/progressBar1" android:layout_width="wrap_content" android:layout_height="wrap_content"></ProgressBar>
</RelativeLayout>
<ListView android:id="@android:id/list"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
这是伟大的和工作良好的第一次,但不幸的是,如果我想重新加载列表视图,我期望的进度对话框再次显示!
但是,我可以使用:
getListView().setAdapter(null);
或
getListView().setAdapter(new TweetItemAdapter(getActivity(),R.layout.row_tweet,new ArrayList<Tweet>()));
我没有看到任何对话框,只有一个空视图。
所以基本上我的问题是"如何显示空布局再次在listview的第二次加载?
编辑:在下面的评论中,我尝试了:
@Override
public void onResume() {
super.onResume();
TweetItemAdapter test = (TweetItemAdapter) getListView().getAdapter();
if(test != null){
test.clear();
test.notifyDataSetChanged();
}
loadTweets(this, getListView());
}
仍然不显示进度对话框,我得到一个空的视图,而加载。(除了第一次加载工作完美)
方法:在您的XML中添加您希望在ListView
为空时显示的视图。然后,在getView()
方法内填充ListView
检查您在适配器中使用的数据提供者的长度(如果它是null或其长度为0),如果它是null/0-length
,则实例化该视图并将其可见性更改为View.VISIBLE
。或者使用getListView().setEmptyView(findViewById(R.id.myemptyview));
备注:我认为没有必要清除适配器test.clear()
,因为(我假设在loadTweets()
的某个地方你有适配器并再次调用notifyDataSetChanged()
) listview将重新填充新数据。
问题:你重新建立的进度对话框每当你调用notifyDataSetChanged()
,因为我的逻辑说:进度对话框必须显示每当你做抓取,即重新填充listview的数据?(我可能错了)