Android TabLayout setupWithViewPager()方法绑定Viewpager不显示文字

2023-11-17


setupWithViewPager() 做了什么事情~


TabLayout tabLayout = findViewById(R.id.tabLayout);
ViewPager viewPager= findViewById(R.id.viewPager);
List<Fragment> fragments = new ArrayList<>();
···

tabLayout.addTab(tabLayout.newTab().setText("首页"));
tabLayout.addTab(tabLayout.newTab().setText("热门"));
tabLayout.addTab(tabLayout.newTab().setText("我的"));

fragments.add(MeFragment.newInstance());;
PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager());
viewPager.setAdapter(pageAdapter);
tabLayout.setupWithViewPager(viewPager);
···



pic



TabLayout addTab设置setText(CharSequence text)
viewPager.setAdapter(pageAdapter);
tabLayout.setupWithViewPager(viewPager);
如果没有重写 PageAdapter的getPageTitle()会出现tab没有设置的titile。

重写 PageAdapter的getPageTitle() tab正常显示。

pc

源码分析:

setupWithViewPager() 做了什么事情~

public void setupWithViewPager(@Nullable ViewPager viewPager) {
    setupWithViewPager(viewPager, true);
  }

public void setupWithViewPager(@Nullable final ViewPager viewPager, boolean autoRefresh) {
    setupWithViewPager(viewPager, autoRefresh, false);
  }

private void setupWithViewPager(
    @Nullable final ViewPager viewPager, boolean autoRefresh, boolean implicitSetup) {
    
  ···
  
  if (viewPager != null) {
    this.viewPager = viewPager;
    ···
    //获取viewPager PagerAdapter 
    final PagerAdapter adapter = viewPager.getAdapter();
    if (adapter != null) {
      setPagerAdapter(adapter, autoRefresh);
    }
  } 
  
  void setPagerAdapter(@Nullable final PagerAdapter adapter, final boolean addObserver) {
    if (pagerAdapter != null && pagerAdapterObserver != null) {
      // If we already have a PagerAdapter, unregister our observer
      pagerAdapter.unregisterDataSetObserver(pagerAdapterObserver);
    }

    pagerAdapter = adapter;

    if (addObserver && adapter != null) {
      // Register our observer on the new adapter
      if (pagerAdapterObserver == null) {
        pagerAdapterObserver = new PagerAdapterObserver();
      }
      adapter.registerDataSetObserver(pagerAdapterObserver);
    }

    // Finally make sure we reflect the new adapter
    populateFromPagerAdapter();
  }
  ···
  
  //重点
void populateFromPagerAdapter() {
    removeAllTabs();
    if (pagerAdapter != null) {
      final int adapterCount = pagerAdapter.getCount();
      for (int i = 0; i < adapterCount; i++) {
        addTab(newTab().setText(pagerAdapter.getPageTitle(i)), false);
      }

      // Make sure we reflect the currently set ViewPager item
      if (viewPager != null && adapterCount > 0) {
        final int curItem = viewPager.getCurrentItem();
        if (curItem != getSelectedTabPosition() && curItem < getTabCount()) {
          selectTab(getTabAt(curItem));
        }
      }
    }
  }

}

总结

重点关注方法:
populateFromPagerAdapter()

addTab(newTab().setText(pagerAdapter.getPageTitle(i)), false);

分析做了什么:

remove所有的Tab
重新addTab
设置pagerAdapter.getPageTitle(i)
所以:如果没有重写:
public CharSequence getPageTitle(int position)
默认返回null
所以不会显示 Tablayout addTab时setText(CharSequence text)

ps:
Tablayout内部其它View:
Tab、TabView、SlidingTabIndicator有兴趣可以深入分析。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android TabLayout setupWithViewPager()方法绑定Viewpager不显示文字 的相关文章

  • jquery-mobile 加载到 android WebView 中

    我无法将 jquerymobile 装饰的网页加载到 Android WebView 中 考虑 jquery 移动演示站点 http jquerymobile com demos 1 0a4 1 http jquerymobile com
  • chrome 检查器,远程调试在我的移动应用程序上不再正常工作

    我使用 Cordova Ionic 构建了一个渐进式 Web 应用程序 三年来的大部分时间里 我一直在使用开发工具来排除故障并分析我的应用程序的内部工作原理 然而 在过去的几周里 我认为自从 Chrome 更新到 v70 以来 开发工具无法
  • 有没有办法有一个屏蔽数字输入字段?

    我正在 Android 上创建一个 HTML5 应用程序 对于这个特定场景 我们有一个用于信用卡安全代码的输入字段 我们希望强制输入字段仅包含数字并被屏蔽 我没有运气搜索这个特定的案例 从我自己研究 尝试中可以看出 这不能纯粹通过 HTML
  • 如何使用 ArrayAdapter

    ArrayList
  • OneSignal 推送通知 单击以打开活动

    我集成了一个用于推送通知的信号库 我想在应用程序未运行时通过单击推送通知来打开特定活动 我收到推送通知 但当我单击通知时 应用程序崩溃了 这是我的通知接收器代码 public class ExampleNotificationOpenedH
  • 加载内容时在 ImageView 中使用“动画圆圈”

    我目前在我的应用程序中使用一个列表视图 可能需要一秒钟才能显示 我目前所做的是使用列表视图的 id android empty 属性来创建 正在加载 文本
  • 检查从 arrayadapter 获取的复选框

    我有标题清单 CheckBox 我想控制默认检查哪一个 所以我试图获得正确的视图并检查它 但由于某种原因它不起作用 知道为什么吗 form checkbox item xml
  • Android - 如何在 ListView 的背景上显示垂直线(并根据行高)?

    如何在背景上显示一条垂直线 如下图蓝色突出显示的那条 在此示例中 我有一个带有 ImageView 元素的 ListView 和 TextView 但它与线条无关 并且我希望这些项目的背景上有一条垂直线 让人感觉它们与每个项目 连接 另请注
  • Android 媒体流错误? java.io.FileNotFoundException:没有内容提供者:http://

    我跟着this https github com Old Geek Radio blob master app src main java org oucho radio MainActivity java在 android 中播放流媒体广
  • 出现软键盘时布局未向上推

    I have designed layout by taking the reference from this https stackoverflow com questions 16411056 how to adjust layout
  • Eclipse Oxygen - 该项目未构建,因为其构建路径不完整

    我刚刚安装了 Eclipse Oxygen 并尝试在工作台中打开现有项目 但收到此错误 该项目未构建 因为其构建路径不完整 不能 找到 java lang Object 的类文件 修复构建路径然后尝试 建设这个项目 我尝试右键单击该项目 转
  • 防止滚动时自定义 ListView 刷新。我想停止刷新

    我在我的 Android 应用程序中使用自定义 ListView 问题是当我滚动 ListView 时 它会自动清除从 EditText Edittext 作为 list item 输入的数据 并且 ListView 刷新 我想阻止它停止清
  • Android 对 Runtime.getRuntime().exec() 的权限

    我有一个应用程序在清单上具有以下权限 我的应用程序在 Android JB 4 1 2 上运行 UPDATE 我尝试在 JB 上运行该应用程序 但它不起作用 它适用于早期的 API 版本
  • Android - 带动画的可扩展 TextView

    我有一个TextView首先显示长文本的一小部分 用户可以按 查看更多 按钮来展开TextView并查看该文本的其余部分 进行测试 我可以通过简单地交换以下值来实现这一点TextView setMaxLines介于 4 之间 用于折叠 和
  • 如何在Android 11中获取dir文件列表

    我想编写自己的精简版文件浏览器 文件 API 现在不适用于外部存储 该版本还提供了对范围存储的改进 这使得开发人员可以更轻松地迁移到使用此存储模型 我不明白如何使用范围存储来访问 sdcard 如果您正在寻找文件选择器体验 存储访问框架 h
  • 安卓浮动键盘

    是否可以通过编程方式更改键盘的位置 我正在开发一个图腾应用程序 如果键盘停靠在底部 则很难使用 我尝试创建一个扩展 InputMethodService 的自定义键盘 并且我能够更改按键的布局 但我无法更改键盘的视图位置 快捷键 https
  • 找不到R类

    当我打开 Eclipse 时 R class在我的项目中消失了 为什么 我有 eclipse juno 和最新版本的 android SDK The R class不会重新生成 因为代码中有错误 我怎么解决这个问题 Try Project
  • Android 10 通知彩色操作按钮

    I m trying to color the buttons Action in Notification like this So far this is what i m achieved so far 下面是我正在使用的代码 通知服
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 允许使用 SurfaceTexture 在 GLSurfaceView 渲染器中进行多通道渲染

    我正在显示视频GLSurfaceView使用需要连续应用多个着色器的自定义渲染器 目前 它可以成功地使用一个着色器 但我不确定如何扩展渲染管道以连续应用多个着色器 我知道有一些关于应用多个着色器的示例 使用FrameBuffers and

随机推荐

  • java线程5种状态_Java线程的5种状态及切换(透彻讲解)-京东面试

    一 Thread的几个重要方法 我们先了解一下Thread的几个重要方法 a start 方法 开始执行该线程 b stop 方法 强制结束该线程执行 c join方法 等待该线程结束 d sleep 方法 线程进入等待 e run 方法
  • JAVA多人聊天室(多线程基础聊天室可以私聊/群聊)

    创建一个类定义聊天的规则 package com test tcpmap 该程序定义了聊天的规则 public interface CrazyitProtocol 定义协议字符串的长度 int PROTOCOL LEN 2 下面是一些协议字
  • JWT的使用详解

    背景 公司处在前后端分离的转折阶段 作为后端人员 要找到一个适用于接口验证的方式 公司仍保持后端使用Laravel框架 而laravel框架默认的是 web 方式 web 方式是使用 session 来进行用户认证 当然也是可以使用 但是有
  • php 上传 excel xlsx_Vue自定义指令实现快速读取Excel

    前几天因为业务需求 所维护的而后台中出现了大量关于上传下载Excel的操作 因为我们的后台是基于Vue 并且是在 vue element admin 的基础上结合实际需求开发而来 vue element admin 中也有一些相关操作 Ex
  • Linux主线程与子线程关系

    问题背景 起因 笔者在开发一个统计Linux系统各个进程 线程loading的软件 精度高于top命令 目前是间隔500ms采样一次 在内核遍历所有线程时 发现如果有的线程在采样间隔中间退出的话 for each process不能遍历到该
  • 你了解Java的内部类吗

    系列文章 该文章为第一篇 前言 内部类顾名思义指的就是一个类声明在另一个类的内部 我们在平时读源码时或多或少见过内部类 但自己写的代码中可能基本不使用或很少使用他们 即使用了可能也不太清楚为什么要使用 只知道可以使用 文章开始之前先罗列一下
  • Numpy章节 3 高级功能

    章节 3 高级功能 1 数组的迭代和排序 NumPy提供了迭代数组元素的方法 并且可以对数组进行排序 示例代码 arr np array 3 1 5 2 4 迭代数组元素 for x in arr print x 输出 3 1 5 2 4
  • matlab运行一直正忙,MATLAB运行时一直处于忙的状态,是不是程序存在死循环

    本帖最后由 安然娜124 于 2016 4 26 21 37 编辑 疑惑 1 该程序点击运行后一直处于忙的状态 好久都没反应 不知道是程序中for语句太多导致的 还是语句存在死循环 2 如果程序可以运行 不管出没出结果 是不是都代表所编的程
  • 使用JavaScript调用常用浏览器,解决IE浏览器兼容性问题

    目录 前言 JavaScript代码 此贴为个人学习记录 便于以后使用 前言 开发中经常会遇到用户使用IE浏览器的情况 但是由于各种兼容问题 网页实际显示效果和开发的效果有较大出入 所以有了以下解决方案 如果当前网页用户使用IE浏览器打开
  • Pytorch中经常见到的View( )函数

    Pytorch里经常会见到tensor view a b c a b c等等都是函数内的参数 可以理解为reshape功能 重构张量的维度 比如 a torch Tensor 2 3 print a tensor 0 0000 0 0000
  • 3D星球动画html,基于Three.js实现的3D土星(星球)动画

    JavaScript 语言 JaveScriptBabelCoffeeScript 确定 function getMat color our material is a phong material with no shininess hi
  • 【c++primer第五版】第六章函数-函数基础、参数传递、返回类型、函数重载、函数指针

    目录 函数基础 局部对象 函数声明 参数传递 main 处理命令行选项 特殊用途语言特性 调试帮助 函数匹配 函数指针 函数是一个命名了的代码块 通过调用相应的函数来执行相应的代码 函数可以有0或多个参数 通常会产生一个结果 也可以重载函数
  • QT——C++ 多线程05

    目录标题 一 创建多线程的方式 一 方式一 二 方式二 三 方式三 一 创建多线程的方式 QT创建 使用 多线程的方式有三种 直接创建QThread 对象 重写run方法 最后调用start方法启动线程 通过调用QObject类提供的mov
  • k8s基础概念、ETCD

    原理 和k8s结合点 etcd与k8s的交集 维护 基础概念 物理组件 逻辑组件 网络组件 工作负载 1 物理组件 Master Control plane kube apiserver 提供唯一api接口 提供集群管理接口 用户认证授权
  • 【Qt】使用 setWindowFlags 方法设置窗体的最小化、最大化、关闭按钮

    一 设置方法 void setWindowFlags Qt WindowFlags type Qt WindowFlags 有很多参数 其中 窗口最小化按钮 Qt WindowMinimizeButtonHint 窗口最大化按钮 Qt Wi
  • html 识别文本中的\n 进行换行

    文本内容有 n 怎么换行 1 v html渲染 使用正则将 n 替换成 br 标签 再用v html渲染 this content value replace n g br div div 2 使用css的white space div t
  • 学好少儿编程做人工智能开拓者

    乔布斯曾经说过 人人都应该学习编程 因为它教会你如何思考 格物斯坦小坦克认为少儿编程教育已经不再是一个遥远的话题 它逐渐成为一个趋势 成为一个现实 少儿教育编程行业领域的火爆 也反映出了国家对于少儿编程教育的重视 以及行业对编程人才的刚性需
  • 虚拟化技术7小问

    目录 kvm中的虚拟机cpu核心大于1 虚拟机就不能启动 只能设置为1的时候虚拟机才能启动 是什么原因 如何查看虚拟机宿主机的CPU是否支持硬件虚拟化 宿主机支持虚拟化 是不是还要开启相关的设置 虚拟机中再安装的虚拟机是不是只能是单核的虚拟
  • 存储器基础入门

    1 泰瑞达机台 Magnum VU本身作为一个灵活 集合式的测试平台 可以支持所有NAND以及MCP MCP Multiple Chip Package 存储器 MCP是在一个塑料封装外壳内 垂直堆叠大小不同的各类存储器或非存储器芯片 是一
  • Android TabLayout setupWithViewPager()方法绑定Viewpager不显示文字

    setupWithViewPager 做了什么事情 TabLayout tabLayout findViewById R id tabLayout ViewPager viewPager findViewById R id viewPage