其他分享
首页 > 其他分享> > android – 在SwipeRefreshLayout中使用RecyclerView时,从底部出现的Overscroll效果不显示

android – 在SwipeRefreshLayout中使用RecyclerView时,从底部出现的Overscroll效果不显示

作者:互联网

我正在尝试使用很好的拉动刷新功能制作一个列表,但是当我在SwipeRefreshLayout中有一个RecyclerView时,过滚动效果仅在刷新时才有效.即使是列表的底部.会发生什么是用户没有列表已结束的视觉提示.

这是我的XML

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swipe_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_vew"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

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

片段中的类:

public class MyListFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
    private SwipeRefreshLayout swipeRefreshLayout;
    private RecyclerView recyclerView;


    static final String[] lines = new String[]{
        "this is line #1",
        "this is line #2"
        "this is line #3"
        "this is line #4"
        "this is line #5"
        "this is line #6"
        "this is line #7"
    };

    @Override
    public void onRefresh() {
        Log.i("QUESTION_LIST_REFRESH", "onRefresh called from SwipeRefreshLayout");
        new Handler().postDelayed(new Runnable() {
            @Override public void run() {
                swipeRefreshLayout.setRefreshing(false);
            }
        }, 4000);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        recyclerView = (RecyclerView) view.findViewById(R.id.questions_list);

        swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_question_list);
        swipeRefreshLayout.setOnRefreshListener(this);
        swipeRefreshLayout.setColorSchemeColors(
                ContextCompat.getColor(getContext(),R.color.colorPrimaryDark),
                ContextCompat.getColor(getContext(),R.color.colorAccent));

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list, container, false);

        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_vew);
        recyclerView.setHasFixedSize(true);

        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(layoutManager);


        recyclerView.setAdapter(new MyListAdapter(lines));

        return view;
    }
}

解决方法:

您可以在recyclerview达到其最高位置时启用刷新.这会解决你的问题吗?

    rv.addOnScrollListener(new RecyclerView.OnScrollListener() {


        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);

            try {

                LinearLayoutManager layoutManager = ((LinearLayoutManager) rv.getLayoutManager());
                int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();


                Log.e("refresh", "State - " + newState + " : firstVisiblePosition" + firstVisiblePosition);
                if (firstVisiblePosition == 0)
                    pullToRefresh.setEnabled(true);
                else
                    pullToRefresh.setEnabled(false);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
});

标签:android,android-recyclerview,swiperefreshlayout,android-overscoll
来源: https://codeday.me/bug/20190608/1199010.html