Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SwipeRefreshLayout只能承载一个直接子级_Android_Xml_Setcontentview - Fatal编程技术网

Android SwipeRefreshLayout只能承载一个直接子级

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

我在我的listView中添加了一个“pull to refresh”,我还想在列表为空时添加一个空视图-现在我遇到了这个错误。我怎样才能做到这一点?如果我将一个视图定位在swipeRefresh之外,然后将其添加为emptyView,它将起作用。那么,如何使用外部xml文件来实现它呢

xml代码:

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