首页 > 解决方案 > 从活动中关闭片段内的底部工作表

问题描述

我有一个查看器,里面有 3 个片段。如果我点击 recyclerview 项目,我在片段内部有一个 recyclerview,它会显示底部表,其中包含该项目的一些详细信息。但是当我点击后退按钮时,它会关闭应用程序。如果我点击后退按钮,我怎样才能实现它会关闭底部工作表,然后关闭应用程序。我可以关闭底页。但是在片段内部没有 onBackPressed 方法所以我不能。任何帮助表示赞赏。

标签: androidandroid-activityandroid-viewpagerfragmentbottom-sheet

解决方案


还有更多的一种方法可以实现这一点,但我想这一切都归结为:

注意:由于没有代码,我怀疑底部工作表在您的片段内。

您必须 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();
        }
   }

没有任何代码,这应该足以为您指明正确的方向。

祝你好运!


推荐阅读