Как закрыть нижний лист при нажатии в адаптере ViewHolder RecyclerView?

Я хочу закрыть свой BottomSheet при щелчке карты в 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.

Заранее спасибо =)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
725
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

то, что вы сделали здесь, не будет работать так, как вы ожидаете: -

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

Здесь вы создаете новый объект bottomSheet, поэтому использование dismiss() для этого объекта не сработает. Вместо этого вам нужен интерфейс, который предоставит вам обратный вызов для вашего фрагмента bottomShett, где вы настроили свой recyclerView. И в этом обратном вызове вам нужно просто вызвать встроенный метод BottomSheet dismiss(). Вот ответ на SO, который показывает, как вы можете создать этот интерфейс, который обеспечит вам обратный вызов для вашего фрагмента.

как вы сказали, я сделал, но все еще получаю ту же ошибку, пожалуйста, проверьте код, я отредактировал вопрос

user13473699 11.12.2020 09:39

Опять вы делаете то же самое. Ссылка в ответе ясно показывает, как вы можете получить обратный вызов элемента для вашего фрагмента/активности. Вам нужно вызвать dismiss() в самом фрагменте. Также нет необходимости делать это BottomSheetCall bottomSheetCall = new BottomSheetCall();, что вы сделали в своем onClickListener. Вам просто нужно вызывать dismiss() в самом фрагменте всякий раз, когда вызывается itemClickListener.

WhiteSpidy. 11.12.2020 10:18

Теперь я, наконец, сделал, спасибо

user13473699 11.12.2020 15:17

Пожалуйста, проголосуйте за ответ. Если это поможет вам, чтобы другие могли легко найти его.

WhiteSpidy. 11.12.2020 16:12

Я новичок в StackOverflow, и у меня 5 баллов репутации, чтобы проголосовать за ответ, мне нужно 15 баллов репутации, после получения 15 в будущем я сделаю это. Большое спасибо

user13473699 11.12.2020 16:31

Не беспокойся. Рад помочь дружище!

WhiteSpidy. 11.12.2020 16:51

Другие вопросы по теме