[英]How to disable pull refresh, When swipe recycler view item?
我在 SwipeRefreshLayout 中使用了一個 recyclerview,當我開始滑動以刪除我的回收器視圖項時,它將主動拉動以刷新。 我想在開始滑動時禁用拉動刷新並啟用完整的滑動。 我使用 ItemTouchHelper 類來檢測滑動動作
這是我的 .xml 文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
而且,這個Java文件,
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
}
}).attachToRecyclerView(recyclerView);
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
super.onSelectedChanged(viewHolder, actionState);
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
swiperefreshLayout.setEnabled(false);
} else {
swiperefreshLayout.setEnabled(true);
}
}
}
您可以在onMove
方法中禁用刷新布局
swiperefreshLayout.setEnabled(false);
然后在onSwiped
方法中啟用它
swiperefreshLayout.setEnabled(true);
我個人是這樣做的:
protected void initRecyclerViewOnItemTouchListener(){
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_UP || (((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition() == 0x0 &&
e.getY() - mRecyclerView.getY() <= mRecyclerView.getHeight() / 0x4)) {
msrlReload.setEnabled(true);
} else {
msrlReload.setEnabled(false);
}
return false;
}
@Override
public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
}
使用此代碼,僅當回收器視圖位於其起始位置時才啟用“滑動刷新”,因此無法向上滾動更多。 然后你有一個啟用了刷新布局的回收器視圖的“切片”,在這種情況下,這個切片是 recyclerview.height / 0x4。
因此,只有當您觸摸回收器視圖的頂部並向下滾動時,刷新才會開始,如果您已經在滾動回收器視圖並且到達頂部並且仍然向上滾動,則不會開始滑動(這是我的問題)有)。
我嘗試了上面的解決方案,但仍然有同樣的問題:如果我開始向下滾動列表,然后向上滾動到頂部並超出滑動以刷新仍在開始。
我希望這對你有幫助,祝你編碼愉快,一天:D
再見!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.