如何“重置”列表视图并在重新填充时再次显示@android:id / empty

时间:2011-08-23 19:09:57

标签: android listview

我的应用程序中的所有列表视图都使用空属性在加载某些Web内容时显示progressdialog:

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

这很好,并且第一次工作正常,但不幸的是,如果我想重新加载listview,我希望progressdialog再次显示!

但是,我可以使用:

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());
    }

仍然没有显示progressdialog,我在加载时得到一个空视图。 (除了第一次加载完全有效)

1 个答案:

答案 0 :(得分:1)

方法:ListView为空时,向您添加要显示的视图。然后填充ListView检查您在getView()方法内的适配器中使用的数据提供者的长度(如果它是null或其长度为0),如果它是null/0-length那么实例化该视图并将其可见性更改为View.VISIBLE。或者使用getListView().setEmptyView(findViewById(R.id.myemptyview));

备注:我认为没有必要清除适配器test.clear(),因为(我假设loadTweets()中的某个地方有适配器并再次调用notifyDataSetChanged())列表视图将重新填充新数据。

问题:每次调用notifyDataSetChanged()时,是否重新执行进度对话框,因为我的逻辑说明:每当您进行提取时必须显示进度对话框,即用数据重新填充列表视图? (我可能错了)