从适配器启动dialogfragment

ogsagwnx  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(663)

有一个 RecyclerView 其中有一个 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() 如何修复?

3qpi33ja

3qpi33ja1#

在适配器中定义 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 或者在构造函数中同时使用它们。如果你把它换掉就更好了。

相关问题