java - 从适配器启动 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()
如何修复它?
解决方案
在您的适配器中定义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
或在构造函数中同时使用它们。如果只是更换它应该会更好。
推荐阅读
- amazon-web-services - AWS:找不到 iam 的实例元数据
- javascript - 如何使用 javascript 和 mvc 将画布上传到项目的文件夹
- sql - 汇总 SQL Server 中 1 列中每个值的值计数
- apache-kafka - 如何获取运行在 ibm cloud 上的中间件服务的可用性状态?
- sql - 如何检查字符串的长度是否超过一个单词并仅保留第一个单词,否则将整个字符串保留在 SQL 中?
- java - Java,无法解析的日期错误,从字符串转换为日期
- git - 如何告诉 git 接受所有当前的更改
- php - Firebase PHP将地图添加到数组
- windows - 在 Windows 中按名称访问 docker 容器
- node.js - 得到错误:解决方法被过度指定。指定回调*或*返回 Promise;不是都