You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Adapter类中调用Fragment?getSupportFragmentManager报错解决

问题原因

getSupportFragmentManager() 是 AppCompatActivity/FragmentActivity 专属的方法,你的 Adapter 继承自 FirestoreRecyclerAdapter,不属于Activity类的子类,自然没有这个方法,所以IDE会标红报错。

解决方案

下面提供两种实用的解决方式,按需选择:

方式一:通过构造函数传入FragmentManager(推荐,耦合度更低)

  1. 修改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();
            }
        });
    }

    // ... 其他原有代码不变 ...
}
  1. 在你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:55:22