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

无法在ViewPager中填充RecyclerView,页面无内容求排查

Hey,我帮你排查了几个关键问题,这应该就是你的ViewPager里RecyclerView没内容的原因:

核心错误点

  1. ViewPagerAdapter的isViewFromObject方法返回值错误
    这个方法是ViewPager用来确认页面视图和实例化对象是否匹配的核心逻辑,你直接返回了false,导致ViewPager根本无法正确识别并展示你的页面,这是最致命的问题。

  2. 数据源复用导致的逻辑混乱
    你把pojoList作为VeiwPagerAdapter的成员变量,两个Tab页面都会往同一个列表里加数据,而且每次页面被实例化时都会重复添加,这不仅会导致数据重复,还可能让后续页面显示错误的内容。

  3. ViewHolder中TextView的ID拼写错误
    你在RecycViewHolder里写的是textvie1和textvie2(少了字母w),如果你的item布局里的ID是textView1和textView2的话,这会导致findViewById返回null,调用setText时要么崩溃,要么完全看不到内容。

修正后的代码

先改ViewPagerAdapter(顺便修正了类名的拼写错误):

public class ViewPagerAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object; // 这里必须返回view和object的匹配判断
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        LayoutInflater inflater = LayoutInflater.from(container.getContext());
        View view = inflater.inflate(R.layout.recycler_view_holder, container, false);
        
        RecyclerView recyclerView = view.findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
        
        // 每个Tab创建独立的数据源,避免数据串用
        List<Pojo> pojoList = new ArrayList<>();
        pojoList.add(new Pojo("TAB " + (position+1) + " Item 1", "Detail for Item 1"));
        pojoList.add(new Pojo("TAB " + (position+1) + " Item 2", "Detail for Item 2"));
        
        recyclerView.setAdapter(new RecycAdapter(pojoList));
        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        // 必须实现这个方法,移除不再需要的页面视图,防止内存泄漏
        container.removeView((View) object);
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return position == 0 ? "TAB 1" : "TAB 2";
    }
}

然后修正RecycViewHolder的ID拼写:

public class RecycViewHolder extends RecyclerView.ViewHolder {
    public TextView textView1, textView2;

    public RecycViewHolder(View itemView) {
        super(itemView);
        // 修正ID拼写,确保和你的item_layout.xml中的ID完全一致
        this.textView1 = itemView.findViewById(R.id.textView1);
        this.textView2 = itemView.findViewById(R.id.textView2);
    }
}

额外检查点

  • 确认你的item_layout.xml里的TextView ID确实是textView1和textView2,如果布局里的ID是别的,要保持和ViewHolder里的一致。
  • 确保recycler_view_holder.xml里确实包含了ID为recyclerView的RecyclerView控件。

这样修改后,你的两个Tab应该就能正常显示RecyclerView的内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:30