【问题标题】:Unable to get parent when bottomsheet called from fragment从片段调用 bottomsheet 时无法获得父级
【发布时间】:2023-02-09 08:49:47
【问题描述】:

我正在尝试为我的 bottomsheet 设置一个 peek 高度,我在下面使用这个方法,当 BottomModalLayout 从活动中调用时它工作正常但当从片段中调用时它不工作 这是我的 bottomModalLayout 代码

public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState){
    super.onViewCreated(view, savedInstanceState);
    System.out.println("Details: "+view.getParent());
    //CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) view.getParent()).getLayoutParams();
    BottomSheetBehavior bottomSheetBehavior=BottomSheetBehavior.from((View) view.getParent());
    //BottomSheetBehavior bottomSheetBehavior=params.getBehavior();
    bottomSheetBehavior.setPeekHeight(1877);
    bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            if (newState == BottomSheetBehavior.STATE_DRAGGING) {
                bottomSheetBehavior.setPeekHeight(1877);
                bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
            }
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
        }
    });
    bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}

这是从片段中调用的

analysis.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BottomModalLayout bottomSheet = new BottomModalLayout();

                bottomSheet.setCancelable(false);
                bottomSheet.show(getFragmentManager(),
                        "ModalBottomSheet");
            }
        });

但得到这个错误

请帮忙!!! 并提前致谢

【问题讨论】:

  • 你能试试吗onStart()回调代替

标签: java android mobile


【解决方案1】:

当你想处理片段时,你必须考虑根。 通过获取根,您可以在片段中执行任何操作。

我认为错误消息是因为你没有得到根。(空因为没有找到根)

尝试使用它来解决问题:

BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(getView().findViewById(R.id.parent_view_id));

getView() 方法将帮助您这样做,或者您可以使用:

View rootView = getView();
// use the rootView in your code 

我希望我能正确解释这一点。

如果您可以显示更多代码,也许我可以为您提供更多帮助

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多