SwipeRefreshLayout只能托pipe一个直接的孩子

我添加了一个“拉刷新”到我的listView,我也想添加一个空的视图,当列表是空的 – 现在我得到这个错误。 我怎样才能做这个工作? 如果我定位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> 

onCreateView:

 View rootView = inflater.inflate(R.layout.fragment_inbox, container, false); View empty = inflater.inflate(R.layout.empty_message_list, container, false); ListView mListView = (ListView) rootView .findViewById(android.R.id.list); ((ViewGroup) mListView.getParent()).addView(empty); TextView textViewToChange = (TextView) empty .findViewById(R.id.welcomeMessage); textViewToChange.setText("YO " + ParseUser.getCurrentUser().getString( ParseConstants.KEY_PRESENTING_USERNAME) + "! bad news.. :("); mListView.setEmptyView(empty); mSwipeRefreshLayout = (SwipeRefreshLayout) rootView .findViewById(R.id.swipeRefreshLayout); mSwipeRefreshLayout.setOnRefreshListener(mOnRefreshListener); mSwipeRefreshLayout.setColorScheme(R.color.swipeRefresh1, R.color.swipeRefresh2, R.color.swipeRefresh3, R.color.swipeRefresh4); return rootView; 

Solutions Collecting From Web of "SwipeRefreshLayout只能托pipe一个直接的孩子"

SwipeRefreshLayout应该是XML文件中的父项。

您可以使用一个FrameLayout作为SwipeRefreshLayout的子SwipeRefreshLayoutListViewTextView (或任何其他空状态视图)可以是FrameLayout子视图。

我需要在我的应用程序中实现相同的“拉刷新”function。 实现“空视图”的另一种(也是非常简单的)方法是使用ListView的页眉或页脚视图。

首先创build一个包含空白视图布局的“empty_view.xml”。 然后在您的托pipe活动的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对象, 适配器是它的适配器。

这在其他情况下也是有用的。 例如,假设列表数据是从Web服务中读取的,加载速度很慢,那么可以将ProgressBar作为视图,并将其设置为ListView的标题视图,以便用户具有一些可视指示。