首页 > 解决方案 > 如何在 ViewHolder RecyclerView 适配器中单击时关闭底部表?

问题描述

我想在 BottomSheet 中单击 cardView 时关闭我的 BottomSheet

这是我的 onBindViewHolder 代码

 class Viewholder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private TextView num_name;
        private TextView call_type;
        private TextView call_duration;
        public Viewholder(@NonNull View itemView) {
            super(itemView);
            num_name = itemView.findViewById(R.id.name_number);
            call_type = itemView.findViewById(R.id.call_type_txt);
            call_duration = itemView.findViewById(R.id.call_duration_txt);

            itemView.setOnClickListener(this);
        }

        private void setData(String name_num, String call_typ, String call_dur){
            num_name.setText(name_num);
            call_type.setText(call_typ);
            call_duration.setText(call_dur);
        }

        @Override
        public void onClick(View view) {
            Toast.makeText(view.getContext(),"clicked", Toast.LENGTH_SHORT).show();
            BottomSheetCall bottomSheetCall = new BottomSheetCall();
            bottomSheetCall.dismiss();
        }
    }

我收到此错误

java.lang.IllegalStateException: Fragment BottomSheetCall{31fd510 (dbba722a-e3f4-46d4-826c-f31cbc221bd6)} not associated with a fragment manager.
        at androidx.fragment.app.Fragment.requireFragmentManager(Fragment.java:910)
        at androidx.fragment.app.DialogFragment.dismissInternal(DialogFragment.java:245)
        at androidx.fragment.app.DialogFragment.dismiss(DialogFragment.java:202)
        at com.google.android.material.bottomsheet.BottomSheetDialogFragment.dismiss(BottomSheetDialogFragment.java:47)
        at com.bizcure.waessentials.ui.main.CallAdapter$1.onClick(CallAdapter.java:53)

onClick 我想关闭 Bottomsheet 并返回 Activity。

提前谢谢你=)

标签: javaandroidandroid-studio

解决方案


你在这里所做的不会像你期望的那样工作:-

BottomSheetCall bottomSheetCall = new BottomSheetCall();
bottomSheetCall.dismiss();

在这里,您正在创建一个新bottomSheet对象,因此dismiss()在此对象上使用将不起作用。相反,您需要一个接口,该接口将为您提供对设置 recyclerView 的 bottomShett 片段的回调。在该回调中,您只需调用 BottomSheet inbuild method 即可dismiss()。这是关于 SO 的答案,它显示了如何创建该接口,该接口将为您提供对 Fragment 的回调。


推荐阅读