我已经SwipeRefreshLayout有两个孩子:RecyclerView
而LinearLayout
让我不得不定制RecyclerView:
recycler_view.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { // int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop(); // swipeRefreshLayout.setEnabled(topRowVerticalPosition >= 0); if (!defined) { toolbarHeight = ll_header.getMeasuredHeight() + 15; footerHeight = ll_footer.getMeasuredHeight() + 15; defined = true; } clipToolbarOffset(); if ((toolbarOffset < toolbarHeight && dy > 0) || (toolbarOffset > 0 && dy < 0)) { toolbarOffset += dy; } if ((footerOffset < footerHeight && dy > 0) || (footerOffset > 0 && dy < 0)) { footerOffset += dy; } onMoved(toolbarOffset, footerOffset); } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { // super.onScrollStateChanged(recyclerView, newState); if (recyclerView.getAdapter() != null) { if (recyclerView.getAdapter().getItemCount() > 0) { int currentPosition = ((RecyclerViewAdapter) recyclerView.getAdapter()).getCurrentPosition(); if (currentPosition > limit && currentPosition >= items.size() - 2) { if (!isLoading) { getContent(); } } } } LinearLayoutManager llm = (LinearLayoutManager) recyclerView.getLayoutManager(); if (recyclerView.getAdapter() == null) { swipeRefreshLayout.setEnabled(true); return; } swipeRefreshLayout.setEnabled(llm.findFirstCompletelyVisibleItemPosition() == 0); } });
如何在LinearLayout拉下时启用刷新SwipeRefreshLayout?
如果要在LinearLayout上启用SwipeRefresh,则需要将LinearLayout放入ScrollView:
// insert layout components here ...