我有一个viewpager,里面有3个片段。在片段内部,如果我单击recyclerview项,则会显示一个recyclerview,它会显示底页以及该项目的一些详细信息。但是,当我单击“后退”按钮时,它将关闭该应用程序。如果单击后退按钮,它将关闭底部工作表,然后关闭应用程序。我可以关闭底页。但是在片段内部没有onBackPressed方法,所以我不能。任何帮助表示赞赏。
答案 0 :(得分:1)
还有一种方法可以实现这一目标,但我想这全都归结为:
注意:由于没有代码,因此我怀疑底页位于片段的内部。
您必须将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。 (当expanded = true时,合拢时为false)
您的PagerAdapter需要注意此变量,例如:
boolean sheetVisible = pagerAdapter.get(fragment).isSheetExpanded;
最后,保存ViewPager的Activity的onBackPressed()应该执行以下操作:
@Override
public void onBackPressed() {
if (sheetVisible) {
// collapse bottom sheet
} else {
super.onBackPressed();
}
}
没有任何代码,这足以使您指向正确的方向。
祝你好运!
答案 1 :(得分:0)
你的片段:
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()
}
}
}
})
}