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
相关产品推荐
相关产品推荐

