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

Android开发:如何在Adapter的onBindViewHolder中获取Fragment类名

解决Adapter中区分对应Fragment的几种方法

方法一:给Adapter添加构造参数传递标识(最直接推荐)

你可以给Adapter新增一个成员变量用来标记当前所属的Fragment,比如用int索引或String类名,在Fragment中创建Adapter时传入这个标识,之后在onBindViewHolder里就能直接通过标识区分加载不同数据。

示例代码:

改造后的Adapter

public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
    // 存储Fragment标识,0代表ReadFragment,1代表另一个Fragment
    private int fragmentType;

    // 修改构造方法,接收标识参数
    public YourAdapter(int fragmentType) {
        this.fragmentType = fragmentType;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        // 根据标识处理不同数据逻辑
        if (fragmentType == 0) {
            holder.contentTv.setText("ReadFragment专属数据");
        } else {
            holder.contentTv.setText("另一个Fragment专属数据");
        }
    }

    // 补充ViewHolder定义、getItemCount等必要方法
    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView contentTv;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            contentTv = itemView.findViewById(R.id.content_tv);
        }
    }
}

在Fragment中创建Adapter时传入标识

比如在ReadFragment里:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_read, container, false);
    RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
    // 传入标识0代表当前是ReadFragment
    YourAdapter adapter = new YourAdapter(0);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    return view;
}

另一个Fragment创建Adapter时传入1即可。

方法二:通过构造传递Fragment实例(新手易理解,但不推荐长期使用)

如果是简单场景,也可以直接把Fragment实例传到Adapter构造方法里,在onBindViewHolder里判断实例类型:

public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
    private Fragment fragment;

    public YourAdapter(Fragment fragment) {
        this.fragment = fragment;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        if (fragment instanceof ReadFragment) {
            // 处理ReadFragment的数据逻辑
        } else {
            // 处理另一个Fragment的数据逻辑
        }
    }

    // 补充ViewHolder等必要代码
}

创建Adapter时直接传this:

YourAdapter adapter = new YourAdapter(this);

这种方式会让Adapter和Fragment产生强依赖,不利于后期代码维护,优先推荐方法一。

内容的提问来源于stack exchange,提问作者mikegrep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:24:50