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
可根据需要更改
我在 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
可根据需要更改