17

我在列表视图中添加了“拉动刷新”,我还想在列表为空时添加一个空视图 - 现在我收到了这个错误。我怎样才能使这项工作?如果我将视图定位在 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>

创建视图:

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;
4

2 回答 2

27

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

您可以使用 aFrameLayout作为 的子级SwipeRefreshLayoutListViewand (或任何其他空TextView状态视图)可以是FrameLayout.

于 2014-05-23T14:01:34.700 回答
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 的标题视图,以便用户有一些视觉指示。

于 2016-02-26T14:20:50.840 回答