Android SwipeRefreshLayout只能承载一个直接子级
我在我的listView中添加了一个“pull to refresh”,我还想在列表为空时添加一个空视图-现在我遇到了这个错误。我怎样才能做到这一点?如果我将一个视图定位在swipeRefresh之外,然后将其添加为emptyView,它将起作用。那么,如何使用外部xml文件来实现它呢 xml代码:Android SwipeRefreshLayout只能承载一个直接子级,android,xml,setcontentview,Android,Xml,Setcontentview,我在我的listView中添加了一个“pull to refresh”,我还想在列表为空时添加一个空视图-现在我遇到了这个错误。我怎样才能做到这一点?如果我将一个视图定位在swipeRefresh之外,然后将其添加为emptyView,它将起作用。那么,如何使用外部xml文件来实现它呢 xml代码: <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipeRefreshLayou
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:clipToPadding="false"
android:paddingBottom="@dimen/inbox_vertical_margin" ></ListView>
</android.support.v4.widget.SwipeRefreshLayout>
SwipeRefreshLayout
应该是XML文件中的父级
您可以使用
FrameLayout
作为SwipeRefreshLayout
的子级。列表视图
和文本视图
(或任何其他空状态视图)可以是框架布局
的子视图我需要在我的应用程序中实现相同的“拉入刷新”功能。实现“空视图”的另一种方法(非常简单)是使用ListView的页眉或页脚视图
首先,创建一个包含空视图布局的“empty_view.xml”。然后在托管活动的onCreate()方法中,执行以下操作:
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();
在上面的代码中,myListView是ListView对象,adapter是它的适配器
这在其他情况下也很有用。例如,假设列表数据是从web服务读取的,加载速度较慢,然后可以将ProgressBar作为一个视图,并将其设置为ListView的标题视图,以便用户有一些视觉指示。我遇到了同样的问题,发现虽然您只使用一个ListView,但它只有一个子视图,这很好,但您可能隐藏了它的可见性,这就是我在结尾犯的错误。小时候有没有把SwipeRefreshLayout设置在另一个布局中?@VinilChandran当然有。您可以使用它,例如在内部
协调布局。唯一的限制是SwipeRefreshLayout
只能有一个子视图,即正在刷新的视图。如果这样做,当ListView无法向上滚动时,是否会出现错误?我经历过,也读过。
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();