ViewPager中的PagerTabStrip在运行测试的时候不显示问题解决

原创 2016年07月18日 06:40:55
   
   刚在使用ViewPager的时候,向其中添加PagerTabStrip,然而在运行的时候PagerTabStrip完全没显示出来,仔细审查了好几遍代码,算是完全没问题,再运行还是不显示,这是什么问题,然后使用了PagerTitleStrip试了试,运行正常,然而PagerTabStrip是怎么回事呢,苦思冥想,回过头看其API,用法完全正确啊,哎,浪费了两个多小时,实在无法了,stackoverflow一下PagerTabStrip,在搜索首页就有个这样的为题:

在里面有两个回答:

1,这个问题和这个是同样的问题:

PagerTabStrip not showing in ViewPager in app targeting Android 6.X (N)

目标是Android N的应用, 需要使用下面的解决办法:

在 onCreateView(), 添加:

((ViewPager.LayoutParams) (view.findViewById(R.id.tab_strip)).getLayoutParams()).isDecor = true;


2,把下面这行从 tab1.onCreateView(...).方法中移除..

((ViewPager.LayoutParams) (view.findViewById(R.id.tab_strip)).getLayoutParams()).isDecor = true;

... 添加它到 MainActivity.onCreate(...) 中.  app 就不会出错了.

你的 tab1 Fragment 不会知道 R.id.tab_strip view控件. 这是 MainActivity class的控件.

    解决办法已经得到,我把上面代码添加到我的主Activity中(ViewPager的Activity),并修改其中id为我的PagerTabStrip的id。再试着运行了一下,终于显示出来了。
    到的此时,问题已经解决,第一个回答中曾给出一个同样的问题的连接,本着扩展视野的精神,点开瞧瞧,其实也有一点价值,可以对此问题的出现有更深的了解。
此问题大意翻译如下:
在目标为Android6.x(N)的app上,ViewPager中的PagerTabStrip不显示


我一个现有的app,使用了ViewPager和PagerTabStrip,它们都是使用多版本的Android SDK 和  com.android.support:appcompat-v7都正常运行并且有一段时间了.但当我试图去完善并且把目标 SDK版本从app的 23 改成 24 而且 com.android.support:appcompat-v7 版本也从 23.4.0 改成 24.0.0.的时候,我发现 PagerTabStrip 从 ViewPager消失不见了, (不仅仅是 PagerTabStrip中的titles ,.而是整个  PagerTabStrip 从 ViewPager 不见了.)

下面是声明的 ViewPager 和 PagerTabStrip 的布局文件:

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v4.view.PagerTabStrip
        android:id="@+id/pagerTabStrip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:textColor="@android:color/white"
        android:background="@color/view_bg_blue" />

</android.support.v4.view.ViewPager>

这是代码写错了还是 ViewPager 或者 PagerTabStrip的一个bug























解决办法和上面已经出现的解决办法是一样的,看其中的一个回答:

这有一个临时的解决方案,直到支持库解决了这个 issue:

((ViewPager.LayoutParams) pagerTabStrip.getLayoutParams()).isDecor = true;

看这里有这个 issue更全面的讨论:https://code.google.com/p/android/issues/detail?id=213359

这个链接是个提交和跟踪Android开源项目的问题的网站内容,打开此链接,此问题和比较有价值的话语的大意如下:

Issue 213359: PagerTabStrip在 com.android.support library 24.0.0上不工作

Reported by andrewpm...@gmail.comJun 16, 2016
我把项目sdk版本更新到 24,支持库也同时更新了 and therefore upgraded my support libraries.

这时PagerTabStrip不出现了.

甚至把项目选项改 "Tabbed activity" 作为默认的启动activity ,在 ViewPager添加 PagerTabStrip 还是不显示

e.g.

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        >


        <android.support.v4.view.PagerTabStrip
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ff0000"
            android:layout_gravity="top"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:textColor="#000000" />


    </android.support.v4.view.ViewPager>


但是当支持库再用 23.3.0 它又会显示.

我是在 nexus 6 运行的 N preview 4 预览版测试的.

Jun 19, 2016
#7 unrealri...@gmail.com
正确的解决方案:

((ViewPager.LayoutParams) tabStrip.getLayoutParams()).isDecor = true;

先来说它的工作原理. 当把一个一个View添加到一个ViewPager的时候,它会获取它的布局参数并且更新他们 , 包括决定View是不是应该作为装饰显示的 isDecor 参数. 先前,所有实现ViewPager.Decor接口的View都是由ViewPager 设置的. PagerTitleStrip 实现了它,而且继承PagerTabStrip 扩展了它,运行正常.

在24.0.0 ,这个接口被这个annotation(注解) ViewPager.DecorView 取代了,不知道什么原因,并且这个annotation需要由view的类型处理. 所以现在 PagerTitleStrip 是annotated(注解过的) ,而不是实现了这个接口, 但是 Android developers 忘记在PagerTabStrip添加相同的 annotation,并且这样的 annotations也是不能由inherited(遗传)得到的 , 就不再有作用了.

解决办法是只需要手动设置一下参数. 其实在 XML文件里设置它会更好,但遗憾的是没有相应的 XML 属性, 所以我们只好在代码中去设置.
Project Member #9 chrisba...@google.com
不完全是. Annotations 也可以inherited(遗传), 但是我们没有添加 @Inherited 标识到 这个annotation.
Jun 21, 2016
#10 unrealri...@gmail.com
我的意思是说默认是不能inherited .你提到的这个标识 (flag)当然也可以解决这个问题.
     
        此时,这个问题出现的原因,也已经知道了,它也许是官方的一个疏忽导致的,将来或者是过几天就会被消灭,但现在记住解决办法就ok了,就是在ViewPager所在的Activity的onCreadView()方法中,添加一句代码就行了

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012585964/article/details/51938640

Eiffel 引介 Part V

Eiffel IntroductionEiffel 引介 Rensselaer, 2000James C. McKim, Jr, Rensselaer at Hartford K ][ N G of ...
  • kingofark
  • kingofark
  • 2003-03-04 08:56:00
  • 1053

ViewPager内容无法显示的问题

1:问题描述 场景: app中有一个listview,listview的item是一条一条的新闻,而listview有一个head,是一个嵌套了viewPager的RelativeLayo...
  • Weilness
  • Weilness
  • 2016-05-23 15:34:23
  • 2079

使用ViewPager加载页面出现空白

原文链接:http://blog.csdn.net/zjf1165/article/details/51076642首次启动程序时首页空白,切换页面后正常为了便于管理,通常为ViewPager的每个子...
  • axi295309066
  • axi295309066
  • 2016-11-29 01:07:24
  • 2868

ScrollView 嵌套 ViewPager,ViewPager内容不显示问题

ScrollView 嵌套 ViewPager,ViewPager内容不显示问题 解决方法: 在ViewPager 外面嵌套ScrollView 时导致ViewPager 中内容不显示,解决的办法是在...
  • Candicelijx
  • Candicelijx
  • 2016-06-28 10:27:18
  • 10598

多个viewpager导致的不显示问题

转自:http://www.trinea.cn/android/android-source-code-analysis/multi-viewpager-to-fragment-not-init/ ...
  • Hknock
  • Hknock
  • 2016-02-03 15:34:12
  • 1836

viewpager不显示内容

最近做一款音乐播放器, 需要在fragment中用viewpager展示内容, 恰好遇到了这个问题, viewpager不显示内容, 因为是配合slidingtablayout使用的, 所以能很明显的...
  • oqqShaw123
  • oqqShaw123
  • 2015-06-19 16:44:01
  • 2191

Fragment里面的Viewpaper不显示内容不执行getItem的解决方案

最近fragment越来越火了,ViewPager也越来越广泛使用了,群里很多朋友就不约而同的遇到了一个奇葩的问题,fragment里面放viewpager有些时候会不会出现内容。所以今天把这个解决方...
  • cshxql
  • cshxql
  • 2014-04-02 11:43:06
  • 11440

fragment中嵌套viewpager,vierpager中有多个fragment,不显示 ...

做布局时,常遇到多重frament嵌套会丢失数据,这是什么原因呢?这篇文章,将会告诉你解决的办法。...
  • mybook1122
  • mybook1122
  • 2014-04-18 11:28:14
  • 68519

viewpager+fragment出现fragment不显示问题

问题出现在adapter里面,贴出原来有问题的adapter package com.jingcai.fu.kuangjia.adapter; import android.support.v4....
  • qq_28919337
  • qq_28919337
  • 2016-03-17 10:00:00
  • 3957

Android 导航条效果实现(三) ViewPager+PagerTabStrip

ViewPager+PagerTabStrip实现Tab效果:(ViewPager默认滑动导航条效果)PagerTabStrip是一个能为ViewPager指示上一个页面、当前页面,下一个页面的可交互...
  • qq_33425116
  • qq_33425116
  • 2016-09-18 20:30:54
  • 2249
收藏助手
不良信息举报
您举报文章:ViewPager中的PagerTabStrip在运行测试的时候不显示问题解决
举报原因:
原因补充:

(最多只允许输入30个字)