我添加了一个"拉动刷新"到我的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;
答案 0 :(得分:18)
SwipeRefreshLayout
应该是XML文件中的父级。
您可以使用FrameLayout
作为SwipeRefreshLayout
的孩子。 ListView
和TextView
(或任何其他空状态视图)可以是FrameLayout
的子视图。
答案 1 :(得分:0)
我需要在我的应用中实现相同的“拉动刷新”功能。实现“空视图”的另一种(并且非常简单)方法是使用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的标题视图,以便用户具有一些可视指示。