使用 SwipeRefreshLayout 从底部滚动到顶部不起作用

Scroll from bottom to top does not work using SwipeRefreshLayout

我已经实现了 SwipeRefreshLayout 并且基本上可以正常工作。 https://developer.android.com/training/swipe/add-swipe-interface.html

我遇到了一个奇怪的问题,当您转到列表底部时,当您尝试滚动到顶部时,SwipeRefreshLayout 会刷新。

那不是我需要的。我只需要滚动到列表的顶部而不刷新 ListView。

我的意思是,根据我们的立场,何时刷新应该是某种条件。正确的?因为当我们在 ListView 的顶部时,预期的行为是允许刷新。

请帮忙。

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swiperefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >

    <SearchView
        android:id="@+id/editSearch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"
        android:queryHint="Input the number"
        />
<ListView
    android:paddingTop="5dp"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"   />

</LinearLayout>

</android.support.v4.widget.SwipeRefreshLayout>

和代码

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_fragment_two, container, false);

        swiperefresh = (SwipeRefreshLayout) view.findViewById(R.id.swiperefresh);
        swiperefresh.setColorScheme(R.color.colorPrimary, R.color.colorAccent, R.color.colorPrimaryDark, R.color.colorPrimary);
        swiperefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

            @Override
            public void onRefresh() {
                swiperefresh.setRefreshing(true);
                Log.d("Swipe", "Refreshing Number");                 
                // Get data from WebAPI or database cache
            }
        });

        return view;
    }

此库允许您在上拉和下拉之间进行选择:

https://github.com/chrisbanes/Android-PullToRefresh

上拉刷新 默认情况下,此库设置为下拉刷新,但如果您想允许下拉刷新,则可以这样做。您甚至可以使用 'both' 设置将视图设置为同时启用上拉和下拉。有关如何设置的详细信息,请参阅自定义页面。

我认为 SwipeRefreshLayout 不允许这样做。

好吧...终于我在这里找到了解决方案Scroll up does not work with SwipeRefreshLayout in Listview

所以我的布局不会改变,但代码是。

我们要做以下事情

  1. 像public一样实施AbsListView.OnScrollListener class FragmentTwo extends ListFragment implements SearchView.OnQueryTextListener, AbsListView.OnScrollListener

  2. 添加已实现接口的两个方法AbsListView.OnScrollListener 喜欢这里

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            swiperefresh.setEnabled(firstVisibleItem == 0);
}

这里的关键是
swiperefresh.setEnabled(firstVisibleItem == 0);

implements OnScrollListener inside listFragment