提问者:小点点

从适配器启动DialogFragment


有一个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");
    }

但是由于它是一个适配器的事实,它对要求活动()发誓如何修复它?


共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或在构造函数中同时使用它们。如果你只是替换它应该会更好。