当前位置: 首页 > wzjs >正文

兰州网站设计公司有哪些南宁市建设工程造价信息网

兰州网站设计公司有哪些,南宁市建设工程造价信息网,自己建设网站要多久,图片网站源码asp实现类今日头条主界面:ViewPager与TabLayout深度整合指南 一、功能概述 类今日头条的滑动标签页效果核心由ViewPagerFragmentTabLayout三大组件构成。本文将深度解析各组件特性,并提供完整的实现方案。 二、环境配置(2023最新) …

实现类今日头条主界面:ViewPager与TabLayout深度整合指南


一、功能概述

类今日头条的滑动标签页效果核心由ViewPager+Fragment+TabLayout三大组件构成。本文将深度解析各组件特性,并提供完整的实现方案。


二、环境配置(2023最新)
// build.gradle(Module)
dependencies {implementation 'androidx.viewpager2:viewpager2:1.0.0'implementation 'com.google.android.material:material:1.9.0'
}

建议优先使用ViewPager2(支持垂直滑动和RTL布局),本文同时保留传统ViewPager实现方案。


三、ViewPager基础实现

1. 布局文件

<androidx.viewpager.widget.ViewPagerandroid:id="@+id/viewPager"android:layout_width="match_parent"android:layout_height="match_parent"/>

2. 自定义PagerAdapter

public class NewsPagerAdapter extends PagerAdapter {private final List<View> mViews;public NewsPagerAdapter(List<View> views) {mViews = views;}@Override public int getCount() { return mViews.size(); }@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view == object;}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int pos) {container.addView(mViews.get(pos));return mViews.get(pos);}@Overridepublic void destroyItem(@NonNull ViewGroup container, int pos, @NonNull Object obj) {container.removeView((View) obj);}
}

3. Activity初始化

ViewPager viewPager = findViewById(R.id.viewPager);
List<View> pages = new ArrayList<>();
// 添加通过LayoutInflater创建的View
viewPager.setAdapter(new NewsPagerAdapter(pages));

四、Fragment动态加载方案

1. 创建Fragment基类

public class NewsFragment extends Fragment {private static final String ARG_TITLE = "title";public static NewsFragment newInstance(String title) {NewsFragment frag = new NewsFragment();Bundle args = new Bundle();args.putString(ARG_TITLE, title);frag.setArguments(args);return frag;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// 返回具体布局视图}
}

2. FragmentPagerAdapter优化

public class FragmentAdapter extends FragmentPagerAdapter {private final List<NewsFragment> fragments;public FragmentAdapter(FragmentManager fm, List<NewsFragment> fragments) {super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);this.fragments = fragments;}@NonNull@Overridepublic Fragment getItem(int pos) { return fragments.get(pos); }@Overridepublic int getCount() { return fragments.size(); }
}

五、TabLayout深度整合

1. XML布局集成

<com.google.android.material.tabs.TabLayoutandroid:id="@+id/tabLayout"android:layout_width="match_parent"android:layout_height="wrap_content"app:tabMode="scrollable"/><androidx.viewpager.widget.ViewPagerandroid:id="@+id/viewPager"android:layout_width="match_parent"android:layout_height="match_parent"/>

2. 双向绑定实现

TabLayout tabLayout = findViewById(R.id.tabLayout);
ViewPager viewPager = findViewById(R.id.viewPager);// 设置预加载页数(优化性能)
viewPager.setOffscreenPageLimit(3);viewPager.setAdapter(adapter);
new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> {tab.setText(titles.get(position));tab.setIcon(R.drawable.ic_tab_indicator);
}).attach();

3. 自定义Tab样式

<style name="NewsTab" parent="Widget.MaterialComponents.TabLayout.Colored"><item name="tabIndicatorColor">@color/primary</item><item name="tabTextAppearance">@style/NewsTabText</item><item name="tabSelectedTextColor">@color/primary_dark</item>
</style><style name="NewsTabText" parent="TextAppearance.MaterialComponents.Button"><item name="android:textSize">14sp</item><item name="fontFamily">@font/news_sans</item>
</style>

六、高级功能扩展
  1. 滑动动画增强
viewPager.setPageTransformer(new DepthPageTransformer());public class DepthPageTransformer implements ViewPager2.PageTransformer {public void transformPage(View view, float position) {if (position < -1) { // [-∞,-1]view.setAlpha(0);} else if (position <= 0) { // [-1,0]view.setAlpha(1 + position);view.setTranslationX(view.getWidth() * -position);} else if (position <= 1) { // (0,1]view.setAlpha(1 - position);view.setTranslationX(view.getWidth() * -position);} else { // (1,+∞]view.setAlpha(0);}}
}
  1. 数据懒加载优化
@Override
public void setUserVisibleHint(boolean isVisible) {super.setUserVisibleHint(isVisible);if (isVisible && isResumed()) {loadData();}
}

七、常见问题解决
  1. Fragment状态丢失
    使用FragmentStatePagerAdapter替代普通Adapter,自动处理Fragment生命周期。

  2. TabLayout指示器错位
    确保在ViewPager.setAdapter()之后调用TabLayout.setupWithViewPager()

  3. 滑动卡顿优化

  • 启用硬件加速
  • 避免在ViewPager中嵌套滚动控件
  • 使用RecyclerView.Adapter代替传统Adapter
http://www.dtcms.com/wzjs/561999.html

相关文章:

  • s什么网站可以接单做设计赚钱野花高清中文免费观看视频
  • 装修公司网站源代码用wordpress搭建商城
  • 公众号做视频网站吗域名停域旧版本app免费下载
  • 免费自助建站平台系统广州网站开发外包公司
  • 成都网站建设成都网络公司ppt简洁模板整套免费
  • ps做网站宽度湖北民族建设集团网站
  • 建设服装网站目的商务电子是学什么的
  • 网站建设好发信息网祺越网站建设
  • 建设银行网站为什么进不去开发一个卖东西的网站多少
  • 微信公众号可以做几个微网站吗英文网站建设easy
  • 优秀国外网站工程建设信息网站接口
  • 网站开发工具的选择网站开发工作流审批流
  • 常州网站设计制作淘宝网店网站建设目的
  • 北京网站设计定制开发建设公司wordpress的静态页面保存在哪里
  • 简述电子商务网站的内容设计与开发域名是什么意思呢
  • 主题资源网站建设 反思中山外贸网站建设
  • 计算机考试模拟网站怎么做网站反链数
  • 怀来网站建设甘肃省建设厅网站质监局
  • it类网站wordpress下载按钮插件
  • 电子商务网站盈利模式怎么用链接进自己做的网站吗
  • 好的漂亮的淘宝客网站模板开发工程师是程序员吗
  • qq头像网站源码wordpress插件教程
  • 石家庄营销型网站建设公司建设营销型网站公司
  • 品牌手机网站开发哪家好按照商业模式
  • 装修网站建设摘要扶贫网站建设
  • 个人网站 目的企业展厅设计施工
  • 常州市城乡建设学院网站百度关键词热度查询工具
  • 网站建设项目设计的图片做造价在那个网站比较好
  • 校园网站建设方案书微课网站建设项目
  • 网站系统分类网站建设属于什么职位