如何在Adapter类中调用Fragment?getSupportFragmentManager报错解决
问题原因
getSupportFragmentManager() 是 AppCompatActivity/FragmentActivity 专属的方法,你的 Adapter 继承自 FirestoreRecyclerAdapter,不属于Activity类的子类,自然没有这个方法,所以IDE会标红报错。
解决方案
下面提供两种实用的解决方式,按需选择:
方式一:通过构造函数传入FragmentManager(推荐,耦合度更低)
- 修改Adapter的构造函数,添加FragmentManager参数并保存:
//Vinculando o reclycler view ao firestore public class Adapter extends FirestoreRecyclerAdapter<Modelo, Adapter.myviewholder> { // 新增成员变量保存FragmentManager private final FragmentManager fragmentManager; // 修改构造函数,接收FragmentManager参数 public Adapter(@NonNull FirestoreRecyclerOptions<Modelo> options, FragmentManager fragmentManager) { super(options); this.fragmentManager = fragmentManager; } // ... 其他原有代码不变 ... @Override protected void onBindViewHolder(@NonNull myviewholder holder, int position, @NonNull final Modelo model) { // ... 其他原有代码不变 ... holder.RLAYOUT.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 使用传入的fragmentManager执行事务 fragmentManager.beginTransaction() .replace(R.id.frameLayout, new DescDenuncia()) .addToBackStack(null) .commit(); } }); } // ... 其他原有代码不变 ... }
- 在你的Activity中创建Adapter实例时,传入
getSupportFragmentManager():
// 示例:在Activity里初始化Adapter的代码 FirestoreRecyclerOptions<Modelo> options = // 你的配置代码 Adapter adapter = new Adapter(options, getSupportFragmentManager());
方式二:从View的Context中获取Activity再调用FragmentManager
直接从点击的View拿到上下文,判断并强转为AppCompatActivity后获取FragmentManager:
@Override protected void onBindViewHolder(@NonNull myviewholder holder, int position, @NonNull final Modelo model) { // ... 其他原有代码不变 ... holder.RLAYOUT.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Context context = view.getContext(); // 先判断上下文是否为Activity实例,避免强转崩溃 if (context instanceof AppCompatActivity) { FragmentManager fm = ((AppCompatActivity) context).getSupportFragmentManager(); fm.beginTransaction() .replace(R.id.frameLayout, new DescDenuncia()) .addToBackStack(null) .commit(); } } }); }
注意事项
- 方式二需要确保触发点击的View的上下文是Activity(一般RecyclerView的ItemView上下文就是Activity,但如果是嵌套在Fragment里的场景,可能需要调整为
getFragmentManager()或getChildFragmentManager()) - 方式一更稳定,避免了上下文强转的潜在风险,推荐使用
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

