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

天津网站建设开发维护阿里云做网站经费

天津网站建设开发维护,阿里云做网站经费,wordpress阅读量怎么查看,网站建设项目推进表在新闻资讯 APP 中添加不同新闻分类页面#xff0c;通过 ViewPager2 实现滑动切换 核心组件的作用 ViewPager2#xff1a;是 ViewPager 的升级版#xff0c;基于RecyclerView实现#xff0c;支持水平 / 垂直滑动、RTL#xff08;从右到左#xff09;布局#xff0c;且修…在新闻资讯 APP 中添加不同新闻分类页面通过 ViewPager2 实现滑动切换 核心组件的作用 ViewPager2是 ViewPager 的升级版基于RecyclerView实现支持水平 / 垂直滑动、RTL从右到左布局且修复了 ViewPager 的诸多缺陷如 notifyDataSetChanged 不生效、滑动冲突等。Fragment可复用的 UI 组件作为 ViewPager2 的 “页面” 内容每个滑动页面对应一个 Fragment 实例。FragmentStateAdapterViewPager2 的适配器专门用于管理 Fragment 与 ViewPager2 的绑定负责创建、销毁 Fragment类似 RecyclerView 的 Adapter。TabLayout可选通常与 ViewPager2 配合使用显示标签标题实现 “标签点击切换 滑动切换” 的联动效果。 开发步骤 1.引入依赖 ViewPager2 属于 AndroidX 库需在build.gradleModule 级别中添加依赖确保版本兼容 dependencies {// ViewPager2核心依赖implementation androidx.viewpager2:viewpager2:1.0.0// Fragment依赖若已引入AndroidX Fragment可忽略implementation androidx.fragment:fragment-ktx:1.5.6// 可选TabLayout联动依赖与ViewPager2配合implementation com.google.android.material:material:1.9.0 }2.创建Fragment页面 每个滑动页面对应一个 Fragment需创建多个 Fragment如首页、推荐、我的等。 以 首页页面为例NonNullOverridepublic ViewHolder onCreateViewHolder(NonNull ViewGroup parent, int viewType) {View view LayoutInflater.from(context).inflate(R.layout.item_recommend_user, parent, false);return new ViewHolder(view);}每个 Fragment 对应一个布局文件如fragment_home.xml仅需简单的 UI 内容即可。 3.自定义一个ViewPage2布局 在 Activity 的布局文件中添加 ViewPager2若需要标签页可搭配 TabLayout 我这里把之前写的recyclerView给改成了ViewPage2用来实现页面的切换 ?xml version1.0 encodingutf-8? androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent!-- 顶部区域搜索框 分类栏 --LinearLayoutandroid:idid/top_containerandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationverticalandroid:elevation4dpapp:layout_behavior.util.ScrollAwareFABBehavior!-- 搜索栏 --LinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalandroid:background#D3D3D3android:padding8dpandroid:elevation2dpEditTextandroid:idid/search_edit_frameandroid:layout_width0dpandroid:layout_height40dpandroid:layout_weight3android:backgrounddrawable/search_bgandroid:paddingHorizontal12dpandroid:singleLinetrue /Buttonandroid:idid/buttonandroid:layout_width0dpandroid:layout_height40dpandroid:layout_weight1android:text搜索android:backgroundTint#4CAF50android:textColorandroid:color/white //LinearLayout!-- 分类栏 --LinearLayoutandroid:idid/category_barandroid:layout_widthmatch_parentandroid:layout_height50dpandroid:orientationhorizontalandroid:backgroundandroid:color/whiteandroid:elevation1dpTextViewandroid:idid/tab_hotandroid:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:text热榜android:textSize16spandroid:textColor#333333android:gravitycenterandroid:clickabletrueandroid:background?attr/selectableItemBackground /TextViewandroid:idid/tab_followandroid:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:text关注android:textSize16spandroid:textColor#333333android:gravitycenterandroid:clickabletrueandroid:background?attr/selectableItemBackground /TextViewandroid:idid/tab_recommendandroid:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:text推荐android:textSize16spandroid:textColor#333333android:gravitycenterandroid:clickabletrueandroid:background?attr/selectableItemBackground /TextViewandroid:idid/tab_cityandroid:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:text同城android:textSize16spandroid:textColor#333333android:gravitycenterandroid:clickabletrueandroid:background?attr/selectableItemBackground //LinearLayout/LinearLayout!-- ViewPager2容器 --androidx.viewpager2.widget.ViewPager2android:idid/view_pagerandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:layout_marginTop?attr/actionBarSize /!-- 底部导航栏保持原设计 --LinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalandroid:padding8dpandroid:background#FFFFFFandroid:layout_gravitybottom !-- 首页 --LinearLayoutandroid:idid/home_tabandroid:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:orientationverticalandroid:gravitycenterImageViewandroid:layout_width25dpandroid:layout_height25dpandroid:layout_gravitycenter_horizontalandroid:srcdrawable/mainandroid:contentDescription首页图标/TextViewandroid:idid/home_textandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textSize16dpandroid:text首页android:gravitycenter_horizontal//LinearLayout!-- 菜单 --LinearLayoutandroid:idid/menu_tabandroid:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:orientationverticalandroid:gravitycenterImageViewandroid:layout_width25dpandroid:layout_height25dpandroid:layout_gravitycenter_horizontalandroid:srcdrawable/menuandroid:contentDescription菜单图标/TextViewandroid:idid/menu_textandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textSize16dpandroid:text菜单android:gravitycenter_horizontal//LinearLayout!-- 我的 --LinearLayoutandroid:idid/mine_tabandroid:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:orientationverticalandroid:gravitycenterImageViewandroid:layout_width25dpandroid:layout_height25dpandroid:layout_gravitycenter_horizontalandroid:srcdrawable/mineandroid:contentDescription我的图标/TextViewandroid:idid/mine_textandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textSize16dpandroid:text我的android:gravitycenter_horizontal//LinearLayout/LinearLayout /androidx.coordinatorlayout.widget.CoordinatorLayout4.实现FragmentStateAdapter ViewPager2 需要实现FragmentStateAdapter管理 Fragment类似 RecyclerView 的 Adapter。FragmentStateAdapter会根据页面切换动态创建 / 销毁 Fragment优化内存占用。 package com.example.news.adapter;import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.viewpager2.adapter.FragmentStateAdapter; import com.example.news.fragment.*;public class CategoryPagerAdapter extends FragmentStateAdapter {public CategoryPagerAdapter(NonNull FragmentActivity fragmentActivity) {super(fragmentActivity);}NonNullOverridepublic Fragment createFragment(int position) {switch (position) {case 0:return new HotFragment();case 1:return new FollowFragment();case 2:return new RecommendFragment();case 3:return new CityFragment();default:throw new IllegalArgumentException(Invalid position: position);}}Overridepublic int getItemCount() {return 4; // 四个分类页面} }5.初始化 ViewPager2 并绑定适配器 public class MainActivity extends AppCompatActivity {private ViewPager2 viewPager2;private TabLayout tabLayout;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager2 findViewById(R.id.view_pager2);tabLayout findViewById(R.id.tab_layout);// 1. 创建Fragment集合ListFragment fragments new ArrayList();fragments.add(new HomeFragment());fragments.add(new RecommendFragment());fragments.add(new MineFragment());// 2. 创建适配器并绑定ViewPager2MyViewPager2Adapter adapter new MyViewPager2Adapter(this, fragments);viewPager2.setAdapter(adapter);// 3. 可选关联TabLayout与ViewPager2实现标签与页面同步new TabLayoutMediator(tabLayout, viewPager2, (tab, position) - {// 设置标签文本根据position动态设置switch (position) {case 0:tab.setText(首页);break;case 1:tab.setText(推荐);break;case 2:tab.setText(我的);break;}}).attach(); // 必须调用attach()才会生效} }可选配置 ViewPager2 高级属性 根据需求设置 ViewPager2 的滑动方向、预加载、滑动禁用等属性 // 1. 设置滑动方向默认水平可改为垂直 viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);// 2. 设置预加载页面数量默认预加载相邻1页不能设置为0 viewPager2.setOffscreenPageLimit(1); // 预加载1页左右各1页// 3. 禁用滑动保留编程式切换如仅通过Tab点击切换 viewPager2.setUserInputEnabled(false);// 4. 页面切换监听监听滑动状态、位置变化 viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {// 页面滚动时回调}Overridepublic void onPageSelected(int position) {// 页面选中时回调常用更新标题栏、加载数据等Log.d(ViewPager2, 选中第 position 页);}Overridepublic void onPageScrollStateChanged(int state) {// 滑动状态变化SCROLL_STATE_IDLE静止、SCROLL_STATE_DRAGGING拖动、SCROLL_STATE_SETTLING惯性滑动} });FragmentStateAdapter 的工作原理 FragmentStateAdapter通过createFragment(int position)为每个位置创建 Fragment且会缓存当前页及相邻页的 Fragment数量由offscreenPageLimit控制。当 Fragment 不可见且超出缓存范围时会被销毁调用onDestroy()但状态会被保存通过onSaveInstanceState()下次显示时重建并恢复状态。构造方法必须传入FragmentActivity或Fragment因为适配器需要通过它们的getSupportFragmentManager()和Lifecycle管理 Fragment 生命周期。
http://www.pierceye.com/news/934706/

相关文章:

  • 关于科技园区建设文章的网站软文兼职10元一篇
  • 免费隐私网站推广海宁自适应网站建设
  • ipad网站制作网络平台怎么建立网站吗
  • 午夜资源站诸暨北京有哪些网站制作公司
  • 无忧自助建站安卓手机建站
  • 网站建设怎设计榆林市城乡建设规划局网站
  • 网站建设相关资讯做网站 思源字体
  • 辽宁网站设计国家开发大学网站作业怎么做
  • 仿西部数码网站注册建筑设计师
  • 南昌企业网站设计建设制作怎么删除ghost wordpress
  • 如何建个人免费网站手机怎么做网站免费的
  • 目前做那个网站能致富怎么增加网站的权重
  • 无锡网站建设818gx中国机械加工网卸粮四通
  • 淘宝网网站建设出入南京最新通知今天
  • 做企业网站项目的心得做网站一定要后台嘛
  • 青峰集团响应式网站论坛网站怎么做跳转
  • 代网站建设制作微信公众号网站开发
  • 潍坊网站的公司电话网站关键字多少个
  • 网站开发确认书青岛做网站的公司哪个好
  • 权威的企业网站建设网站开发费用算无形资产吗
  • 网站安全在线检测网络制作软件
  • 潍坊网站设计制作威宁住房和城乡建设局网站
  • 哈尔滨企业建站网站开发推广文案怎么写
  • 建立电子商务网站目的想要开网店怎么开
  • iis怎么建设网站内容杭州做搜索引擎网站的公司
  • 兰州网站开发价格建设和住房保障部 网站
  • 机械设备网站建设效果好的徐州网站开发
  • 商丘网站建设专业现状桓台县网站建设
  • 一级a做爰片免费网站孕交视频教程wordpress用的什么前端
  • 中文设计网站wordpress退出登录