SwipeRefreshLayout can host only one direct child

本秂侑毒 提交于 2019-12-01 16:24:39

SwipeRefreshLayout should be the parent in the XML file.

You can use a FrameLayout as the child of SwipeRefreshLayout. The ListView and TextView (or any other empty state view) can be child views of the FrameLayout.

I needed to implement the same "pull to refresh" feature in my Apps. An alternative (and quite simple) way to implement the 'empty view' is to use the ListView's header or footer views.

First you create an "empty_view.xml" containing the empty view layout. Then within the onCreate() method of your hosting activity, do something like:

View headerView = LayoutInflater.from(this).inflate(R.layout.empty_view, myListView, false);
myListView.addHeaderView(headerView);
myListView.setAdapter(adapter);

// populate your ListView here
// ......

// now check the number of items and remove the empty view if needed
if (number_of_items > 1) {
  myListView.removeHeaderView(headerView);
}
adapter.notifyDataSetChanged();

In the above code myListView is the ListView object and adapter is its adapter.

This is useful in other situations too. For example, assume the list data is read from a web service and is slow to load, then one can put a ProgressBar is a view and set it as the ListView's header view so that user has some visual indication.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!