上述是作业要求
基本思路,在fragment使用adapter实现
Fragment
Fragment是为了解决Android APP运行的设备大小不一而提出来的,我们可以把Fragment当成Activity界面的一个组成部分,一个Activity中可以包含很多Fragment,他有着自己的布局文件
ViewPager2
是一种adapterview,配合Fragment的使用,这需要借助FragmentStateAdapter
1
这是程序的主布局文件,一个TabLayout和一个ViewPager2
2
定义两个布局文件,一个是页面的整体布局,一个是在每一个小的Adapter中的item
BUG警告,在Adapter中的item布局文件请不要和上面的布局文件混淆,他们是不一样的(debug一天有感
对于数据源的类,我们在get方法中添加了初始的的数据
在这个Fragment中我们返回了一个GirdView,并把这个填好了去返回,对于每一个界面我们都写一个一样的即可
当然,我们不难发现,在定义的过程中我们使用了不同的Adapter,自然,我们需要定义每一个Adapter,与上一节的一样,我们自定义Adapter需要重写四个方法,最后再根据布局文件填入数据即可
3
自定义的FragmentStateAdapter,和自定义Adapter类似,不过构造方法和一些方法不同
让我们来看看整体的代码吧
public class HomWorkActivity extends AppCompatActivity {
private TabLayout tb_shop;
private ViewPager2 vp_shop;//主页面的两个控件
private List<String> tabNameList;//游标的list
private List<Fragment> fragmentList;//fragment的list
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapter_hom_work);
findViews();//获取控件
initFragment();//初始化
FragmentShopAdapter shopAdapter = new FragmentShopAdapter(
fragmentList,//数据源
this//当前的activity
);//这里是步骤三 获取适配器对象
vp_shop.setAdapter(shopAdapter);//给ViewPager2绑定适配器
TabLayoutMediator mediator = new TabLayoutMediator(
tb_shop,
vp_shop,
new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tab.setText(tabNameList.get(position));
}
}
);
mediator.attach();
// 这里使用匿名内部类的方式去关联,按照下标的方式依次绑定标签和fragment
}
private void initFragment() {
fragmentList = new ArrayList<>();
fragmentList.add(new Fragment_Recommend());
fragmentList.add(new Fragment_Camera());
fragmentList.add(new Fragment_Lens());//现在list里面加入三个fragment,在这里进入步骤二
tabNameList = new ArrayList<>();
tabNameList.add("推荐");
tabNameList.add("相机");
tabNameList.add("镜头");
}
private void findViews() {
tb_shop = findViewById(R.id.tb_shop);
vp_shop = findViewById(R.id.vp_shop);
}
}