有一个RecyclerView
,其中有一个项目
,我需要点击打开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");
}
但是由于它是一个适配器的事实,它对要求活动()
发誓如何修复它?
在您的适配器中,将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
或在构造函数中同时使用它们。如果你只是替换它应该会更好。