如何在Activity内嵌ViewPager2的Fragment中加载单行布局展示滚动列表
问题汇总
- Activity中适配器实例化类名错误:你定义的ViewPager2适配器类名为
VPgrFragAdapter,但Activity代码中实例化的是不存在的PgrFrgrankAdapter,导致Fragment根本没有正常挂载到ViewPager2上。 - FragmentTwo根布局高度错误:Fragment的根布局设置为
wrap_content,在ViewPager2中会导致高度无法撑开,布局不可见。 - RecyclerView适配器
getItemCount返回值错误:你直接返回了0,RecyclerView会判定没有条目需要渲染,自然不会加载单行布局。 - 数据源为空且没有绑定控件:Fragment中初始化的
rankarraylist没有添加测试数据,同时适配器的ViewHolder没有绑定布局中的TextView控件,onBindViewHolder也没有做赋值逻辑。 - 布局语法错误:FragmentTwo的XML布局最后缺少
</androidx.constraintlayout.widget.ConstraintLayout>闭合标签,会导致编译错误。
对应修复方案
1. 修复Activity中适配器实例化代码
把Activity中适配器初始化的代码替换为:
VPgrFragAdapter frgrankAdapter = new VPgrFragAdapter(fm, getLifecycle()); pager2.setAdapter(frgrankAdapter);
2. 修复FragmentTwo根布局高度
修改FragmentTwo的XML根布局属性,同时补全闭合标签:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" <!-- 把wrap_content改成match_parent --> android:layout_height="match_parent" android:background="@color/backgMainPg3dark" tools:context=".VpgFgtwo">
末尾补全</androidx.constraintlayout.widget.ConstraintLayout>。
3. 修复RecyclerView适配器的getItemCount
修改FG2Pgr2adapter中的getItemCount方法:
@Override public int getItemCount() { return rankarraylist.size(); }
4. 给ViewHolder绑定控件,补充赋值逻辑
修改FG2Pgr2adapter的Hold类和onBindViewHolder方法:
class Hold extends RecyclerView.ViewHolder { TextView positionTv; TextView prizemoneyTv; public Hold(@NonNull View itemView) { super(itemView); // 绑定布局中的控件 positionTv = itemView.findViewById(R.id.position); prizemoneyTv = itemView.findViewById(R.id.prizemoney); } } @Override public void onBindViewHolder(@NonNull FG2Pgr2adapter.Hold holder, int position) { RankModelClass rankModelClass = rankarraylist.get(position); holder.positionTv.setText("#" + rankModelClass.getRankposition()); holder.prizemoneyTv.setText(String.valueOf(rankModelClass.getPrizewin())); }
5. 给Fragment添加测试数据
在VpgFgtwo的onCreateView方法中,适配器初始化完成后添加测试数据验证:
// 设置适配器之后添加测试数据 for (int i = 1; i <= 20; i++) { rankarraylist.add(new RankModelClass(i, i * 100.5)); } // 通知适配器数据更新 fg2Pgr2adapter.notifyDataSetChanged();
做完以上修改即可正常显示预期的垂直滚动列表效果。
内容的提问来源于stack exchange,提问作者Kumar Harsh
相关产品推荐
相关产品推荐

