关闭活动中片段的底部工作表

时间:2019-07-20 11:25:09

标签: android android-activity android-viewpager fragment bottom-sheet

我有一个viewpager,里面有3个片段。在片段内部,如果我单击recyclerview项,则会显示一个recyclerview,它会显示底页以及该项目的一些详细信息。但是,当我单击“后退”按钮时,它将关闭该应用程序。如果单击后退按钮,它将关闭底部工作表,然后关闭应用程序。我可以关闭底页。但是在片段内部没有onBackPressed方法,所以我不能。任何帮助表示赞赏。

2 个答案:

答案 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()
                        }
                    }
                }
            })
    }