#java #android #android-adapter #android-dialogfragment
#java #Android #android-адаптер #android-диалоговый фрагмент
Вопрос:
Существует a RecyclerView
, в котором есть an item
, мне нужно открыть DialogFragment
его по щелчку мыши.
Чтобы переключиться на обычное Fragment
использование, я пишу следующее:
holder.ll_main.setOnClickListener(v -> {
FragmentBabyIsland fragment = new FragmentBabyIsland(); // you fragment
FragmentManager fragmentManager = ((FragmentActivity) v.getContext()).getSupportFragmentManager(); // instantiate your view context
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.animator.nav_default_enter_anim, R.animator.nav_default_exit_anim,
R.animator.nav_default_pop_enter_anim, R.animator.nav_default_pop_exit_anim);
fragmentTransaction.replace(R.id.fragment, fragment);// your container and your fragment
fragmentTransaction.addToBackStack("tag");
fragmentTransaction.commit();
});
Чтобы перейти к DialogFragment, я пишу следующее
holder.ll_main.setOnClickListener(v -> {
openDialog();
});
private void openDialog() {
DialogSort dialogSort = new DialogSort();
dialogSort.show(requireActivity().getSupportFragmentManager(), "SortDialog");
}
Но из-за того, что это Адаптер, он ругается на requireActivity()
Как это исправить?
Комментарии:
1. Вы можете использовать
v.getContext()
для получения контекста . в конечном((AppCompatActivity)v.getContext()).getSupportFragmentManager()
счете . Или вместо того , чтобы делать это , вы можете предоставить интерфейс обратного вызова вызывающему компоненту и написатьopenDialog
там код . Или у вас может быть поле конструктора в адаптере. использование интерфейса обратного вызова — лучший вариант .
Ответ №1:
В вашем адаптере определите Activity
как:
private AppCompatActivity mActivity;
Затем измените свой конструктор на:
public MyAdapter ( AppCompatActivity activity , ArrayList<MyItem> list ) {
this.mActivity = activity;
}
После того, как вы сделаете это, вы можете использовать mActivity
для отображения диалогового окна:
DialogSort dialogSort = new DialogSort();
dialogSort.show( mActivity.getSupportFragmentManager(), "SortDialog");
Обратите внимание, что если вы уже используете Context
, замените его на AppCompatActivity
или используйте их оба в конструкторе. Было бы лучше, если бы вы просто заменили его.