android - 从活动中关闭片段内的底部工作表
问题描述
我有一个查看器,里面有 3 个片段。如果我点击 recyclerview 项目,我在片段内部有一个 recyclerview,它会显示底部表,其中包含该项目的一些详细信息。但是当我点击后退按钮时,它会关闭应用程序。如果我点击后退按钮,我怎样才能实现它会关闭底部工作表,然后关闭应用程序。我可以关闭底页。但是在片段内部没有 onBackPressed 方法所以我不能。任何帮助表示赞赏。
解决方案
还有更多的一种方法可以实现这一点,但我想这一切都归结为:
注意:由于没有代码,我怀疑底部工作表在您的片段内。
您必须 setBottomSheetCallback 到您拥有它的片段:
BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View view, int newState) {
switch (newState) {
case BottomSheetBehavior.STATE_EXPANDED: {
// sheet expanded
}
break;
case BottomSheetBehavior.STATE_COLLAPSED: {
// sheet collapsed
}
break;
}
}
@Override
public void onSlide(@NonNull View view, float v) {
}
});
然后有一个像 isSheetExpanded 这样的全局布尔值并将其设置为 onStateChanged。(展开时 = true,折叠时 = false)
您的 PagerAdapter 需要了解此变量,例如:
boolean sheetVisible = pagerAdapter.get(fragment).isSheetExpanded;
最后,持有 ViewPager 的 Activity 的 onBackPressed() 你应该这样做:
@Override
public void onBackPressed() {
if (sheetVisible) {
// collapse bottom sheet
} else {
super.onBackPressed();
}
}
没有任何代码,这应该足以为您指明正确的方向。
祝你好运!
推荐阅读
- java - 没有为参数 1 指定值 - 查询是否太长?
- java - 用整数减去 java.util.Date
- r - 如何过滤面板数据以仅包括参与所有年份的人?
- aspnetboilerplate - ABP 中的 JWT 身份验证
- ios - 放大/缩小整个 Tableview
- android - 具有 UNIQUE KEY 约束的房间迁移不起作用
- javascript - 无法使用 npm 在 macOS 上安装 vue
- ios - UILabel 没有正确地将文本包裹在里面
- python - 在 Anaconda 提示符下安装 Jupyter Notebook 时出错
- python - 检查包含字符串和整数的熊猫系列中的值时的令人困惑的行为