android - 如何在实现 swipeRefreshLayout 时防止用户滚动?
问题描述
在我的应用程序中,我有一个包含 20 - 30 个项目的回收站视图,并且我具有拉动刷新内容的功能,并且我想防止用户在刷新过程中滚动视图,因为如果用户与滚动联系在一起,regresh 正在进行中,但我真的不知道该怎么做:/
eRecyclerView = findViewById(R.id.recycler_view);
RecyclerView.LayoutManager eLayoutManager = new GridLayoutManager(this, 2);
eRecyclerView.setLayoutManager(eLayoutManager);
swipeRefreshLayout = findViewById(R.id.refreshSecondLevel);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadNewContent();
Handler delay = new Handler();
delay.postDelayed(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(false);
}
}, 3000);
}
});
解决方案
你应该覆盖canScrollVertically
你的方法RecyclerView.LayoutManager
:
public class ToggledScrollLayoutManager extends LinearLayoutManager {
private boolean mIsScrollEnabled = true;
public ToggledScrollLayoutManager(Context context) {
super(context);
}
public void setScrollEnabled(boolean enabled) {
this.mIsScrollEnabled = enabled;
}
@Override
public boolean canScrollVertically() {
return mIsScrollEnabled && super.canScrollVertically();
}
}
然后在用户刷新页面时使用它:
recyclerView = findViewById(R.id.recyclerView);
ToggledScrollLayoutManager layoutManager = new ToggledScrollLayoutManager();
recyclerView.setLayoutManager(layoutManager);
swipeRefreshLayout = findViewById(R.id.refreshSecondLevel);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadNewContent();
layoutManager.setScrollEnabled(false);
Handler delay = new Handler();
delay.postDelayed(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(false);
layoutManager.setScrollEnabled(true);
}
}, 3000);
}
}
});
推荐阅读
- postgresql - 避免在 Postgres 中重复子查询
- javascript - 在编写 VSCode 扩展时如何通过 nodejs 后端访问系统媒体播放器
- reactjs - 部署到 App Engine 时,由“npm run build”构建的反应应用程序未加载图像源
- android - Play 商店:发布状态:已删除 - APK 需要有效的隐私政策
- sqlalchemy - SQLAlchemy:从现有表反映的表获得不同的表排序规则
- javascript - shelljs echo.to 命令超时
- jenkins - 是否可以在 Execute Shell 部分运行声明性脚本?
- android - DB Flow - net.sqlcipher.database.SQLiteException: file is not a database: ,编译时:select count(*) from sqlite_master;
- wpf - 由于 DLL 延迟加载(异步),初始运行会阻塞 UI
- flutter - 颤振折线问题