Переопределите onCancel в BottomSheetFragment, чтобы установить для состояния значение COLLAPSED.

Я пытаюсь реализовать BottomSheet с помощью BottomSheetFragment, который сворачивается, когда пользователь щелкает вне диалогового окна. Я попытался переопределить onCancel, но установить состояние STATE_COLLAPSED, но это не работает - BottomSheet исчезает при нажатии снаружи. Также есть setHideable(false). Итак, я ожидаю, что нижний лист схлопнется, когда пользователь щелкнет наружу, а это не так. Как я могу этого добиться?

public class MyBottomSheet extends BottomSheetDialogFragment {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.eazyotp_auto_capture_bottomsheet, container, false);
    }

    @Override
    public void onCancel(@NonNull DialogInterface dialog) {
        super.onCancel(dialog);
        behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); // does not work

    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        behavior = getDialog().getBehavior();
        behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        behavior.setHideable(false);
        behavior.setPeekHeight(70); 
       // following works well - even when user drags the bottomsheet it gets into collapsed state.
        imageView.setOnClickListener(v -> {
        if(behavior.getState() == BottomSheetBehavior.STATE_EXPANDED)
            behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
        else
            behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
    });

    }
}

Кроме того, когда я делаю setCancelable(false), я не могу использовать свертывание / развертывание на imageView


person Sairaj Sawant    schedule 07.03.2020    source источник
comment
Итак, вы хотите, чтобы диалоговое окно исчезало, когда пользователь щелкает наружу? это ваш ответ?   -  person Pratik Butani    schedule 09.03.2020


Ответы (1)


добавить это в activityCreted getDialog().setCanceledOnTouchOutside(true)

person Amit pandey    schedule 07.03.2020
comment
Спасибо. Но это не сворачивает BottomSheet, он остается в развернутом состоянии. - person Sairaj Sawant; 07.03.2020
comment
извини мою ошибку, сделай это правдой - person Amit pandey; 07.03.2020
comment
Не будет ли этот срабатывание onCancel нормально, как сейчас? Это не сжимает лист. - person Sairaj Sawant; 07.03.2020
comment
чем сделать это false и setCancalable (false) - person Amit pandey; 07.03.2020