BottomSheetBehavior 无法在 viewpager 上折叠

BottomSheetBehaviour can't collapse on view pager

我在 viewpager 中有 3 个 Fragment's 页。在 Fragment 中包含 BottomSheetBehaviour。我设置的默认状态是 STATE_EXPANDED.

在每个页面中,我都会拖动面板使其折叠。这里的场景:

第1页 : 拖动面板到底部(状态变为STATE_COLLAPSE)

第2页 : 拖动面板到底部(状态变为STATE_COLLAPSE)

第3页:拖拽面板到底部(状态变为STATE_COLLAPSE


The problem

当我回到第 1 页 时,面板会自行更改为扩展 (STATE_EXPANDED)。它应该仍然是 STATE_COLLAPSE 第 1 页

相反,如果我从第1页转到第3页第3页[=的面板54=] 自己长大 (STATE_EXPANDED)。

所以我认为面板在每 2 页中自行出现,


我的问题是:从我上面的问题来看,如何让面板在我自己拖上去之前仍然折叠(STATE_COLLAPSE)?

Here my current code :

private void initListenerDragging(){

    ivButtonUpDown.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
        }
    });

    bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged( View bottomSheet, int newState) {

            if(newState==BottomSheetBehavior.STATE_EXPANDED){
                ivButtonUpDown.setImageResource(R.drawable.ic_1491218023_double_arrow_bottom);
                ivButtonUpDown.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
                    }
                });
            }else if(newState==BottomSheetBehavior.STATE_COLLAPSED){
                ivButtonUpDown.setImageResource(R.drawable.ic_1491217689_double_arrow_top);
                ivButtonUpDown.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                    }
                });
            }
        }

        @Override
        public void onSlide( View bottomSheet, float slideOffset) {
        }
    });
}

视图分页器将紧邻当前片段左侧或右侧的那些片段保留在内存中。这意味着当您在第一个片段中时,只有第二个片段在内存中,第三个片段仅在您向右滑动时创建。

当你在第三个片段时,同样的事情会发生,只有第二个在内存中(紧挨着它的那个,而不是第一个片段)。仅当您向左滑动时,才会重新创建第一个片段并将其存入内存。

默认情况下,viepager 只加载当前片段每一侧的一个片段。为了克服这个问题,您可以通过简单地像这样

来手动设置要加载的片段数
viewPager.setOffscreenPageLimit(2);

此处2可根据需要更改