首页 > 解决方案 > 从适配器启动 DialogFragment

问题描述

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

标签: javaandroidandroid-adapterandroid-dialogfragment

解决方案


在您的适配器中定义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或在构造函数中同时使用它们。如果只是更换它应该会更好。


推荐阅读