BottomSheetBehaviour无法在视图寻呼机上折叠

时间:2017-04-10 05:59:47

标签: android bottom-sheet

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

在每个页面中,我都会拖动面板使其崩溃。这个场景:

在第1页:将面板拖到底部(状态更改为STATE_COLLAPSE

在第2页:将面板拖到底部(状态更改为STATE_COLLAPSE

在第3页:将面板拖到底部(状态更改为STATE_COLLAPSE

  

问题

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

相反,如果我从第1页转到第3页第3页的面板将会启动(STATE_EXPANDED )自我。

所以我认为小组每两页就会自我升级,

我的问题是:从我上面的问题开始,在我自己拖拽之前如何让面板仍然崩溃(STATE_COLLAPSE)?

  

这是我目前的代码:

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) {
        }
    });
}

2 个答案:

答案 0 :(得分:1)

默认情况下,viepager只加载一个片段,该片段位于当前片段的每一侧。要解决这个问题,您可以通过简单地将其加载来手动设置要加载的片段数量

viewPager.setOffscreenPageLimit(2);

此处2可根据您的需要进行更改

答案 1 :(得分:0)

视图寻呼机将当前片段左侧或右侧的片段保留在内存中。这意味着当您在第一个片段中时,只有第二个片段在内存中,第三个片段仅在您向右滑动时创建。

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