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