[英]Close bottom sheet inside fragment from activity
我有一个里面有 3 个片段的 viewpager。 在片段内部,我有一个 recyclerview,如果我点击 recyclerview 项目,它会显示底部的表格,其中包含该项目的一些详细信息。 但是当我点击后退按钮时,它会关闭应用程序。 如果我点击后退按钮,我怎么能做到这一点,它会关闭底部工作表,然后关闭应用程序。 我可以关闭底页。 但是在片段内部没有 onBackPressed 方法所以我不能。 任何帮助表示赞赏。
还有更多的一种方法可以实现这一点,但我想这一切都归结为:
注意:由于没有代码,我怀疑底部工作表在您的片段内。
您必须将BottomSheetCallback 设置为您所在的片段:
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();
}
}
没有任何代码,这应该足以为您指明正确的方向。
祝你好运!
你的片段:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requireActivity().onBackPressedDispatcher.addCallback(
this,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
when (bottomSheetBehavior.state) {
BottomSheetBehavior.STATE_HALF_EXPANDED -> {
closeBottomSheetFragment()
}
else -> {
isEnabled = false
requireActivity().onBackPressed()
}
}
}
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.