ViewPagerIndicator的引用和改样式—Android项目实战—新闻APP03


不否认努力,继续加油!
学习整理重点、盲区,笔记如下:干干巴巴,麻麻赖赖,一点都不圆润……

day03

内容

1. 手动解析json数据

  1. Json → Bean;

    a. 工具;插件;

    b. 手写 Bean 文件;定义属性及 get 、 set 、 toString 方法;对于还有字母的选项,可以新建内部类,并实现其对应的方法;

  2. 解析 Json

    a. 通过 optInt() 等方法获得数据

    jsonObject.optInt("retcode");
    jsonObject.optJSONArray("data");
    childrenJson.optString("title");`
    

    b. new 出 Bean 对象,并利用 for 循环 set() 将数据设置数据;要注意对数据进行判空处理;

2. 文本数据缓存

  1. 在缓存工具类中,用SharedPreferences ,写 put() 和 get() 方法;可以在方法的参数中传入 上下文;

  2. 对于数据的缓存和调用;

    a. 当请求到网络数据后,进行 put() 写入缓存;

    b. 在初始化数据的方法中,在请求网络之前,把保存的数据用 get() 获取,并解析展示出来;

3. 新闻详情页面(NewsMenuDetailPager)的填充

  1. 实现分析&并且实现布局

    上边实现一个选项卡的效果,下面还是一个 ViewPager ;
    在这里插入图片描述

  2. 选项卡对应的详情页面 TabDetailPager

    简单初始化数据,实现大体框架;

  3. 准备NewsMenuDetailPager的数据并且显示

    a. 把 NewsCenterPager 传数据给 NewsMenuDetailPager ;

    b. 在NewsMenuDetailPager中接收数据;

    c. 初始化数据;

    d. 在 NewsCenterPager 中 initData 方法添加调用;

4. 开源项目ViewPagerIndicator引用和改样式

  1. 引入开源项目 ViewPagerIndicator

    a. 该项目是用来实现 选项卡功能;下载并导入 sample;

    b. 修改案例和库中 build.gradle 中版本号和依赖相关问题;运行案例;

    c. 给项目添加 ViewPagerIndicator 依赖

  2. 使用TabPageIndicator数据的显示

    a. TabPageIndicator 关联 ViewPage;

    //给TabPageIndicator关联ViewPage,一定要关联,否则报错
    //当TabPageIndicator和ViewPage关联后,TabPageIndicator的数据由ViewPage的适配器来设置
    mPageIndicator.setViewPager(mViewPager);
    

    b. 给TabPageIndicator提供选项卡标签数据;

  3. 设置TabPageIndicator样式

    a. 从 ViewPagerIndicator 工程拷贝 SampleTabsDefault 对应的 style;

    b. 调整字体大小颜色以及选中后显示的颜色;

    c. 调整选项卡选中后,显示的样式;

  4. 解决事件冲突

    a. BUG:当选项卡选中最后一个时;继续向右划依然响应,不过显示白屏并且不回弹;

    b. 涉及到事件传递中的事件冲突;父视图对其子视图的滑动事件进行了拦截,导致滑动事件无法传递到子视图;

    c. 只需要在父视图,即 自定义的那个 VIewPager 中设置对事件不拦截即可;

    public boolean onInterceptTouchEvent(MotionEvent arg0) {
         return false;
    }
    
  5. ViewPageIndicator 的使用步骤总结

    a. 选项卡标签的使用;下载开源框架,把library引入工程;

    b. 在布局文件申明引用 TabPageIndicator 控件,必须和ViewPager搭配使用;

    c. ViewPager 设置适配器;

    //给 TabPageIndicator 关联 ViewPage ,否则报错
    //当TabPageIndicator和ViewPage关联后,TabPageIndicator的数据由ViewPage的适配器来设置
      mPageIndicator.setViewPager(mViewPager);
    

    d. 给当前的MainActivity在功能清单文件中设置主题

    <activity android:name="com.example.beijingnews.MainActivity"
              android:theme="@style/Theme.PageIndicatorDefaults"/>
    

    e. 修改 style 样式;

5. 选项卡页签详情页面事件的处理

  1. 向右箭头点击下一个页面

    a. 首先设置布局文件,在选项卡的标题右侧添加一个 ImageButton;

    b. 设置点击事件,点击移动到下一个选项卡;

  2. 页签手指按下从左到右滑动的 bug

    a. BUG 描述:当从左向右滑动 选项卡 标题时,直接调出了菜单;

    b. 阻止父层的 View 截获 touch 事件;

    在选项卡的 dispatchTouchEvent() 中,调用 getParent().requestDisallowInterceptTouchEvent(true);方法。true 表示不许父元素拦截当前控件的的事件,一旦底层View收到touch的 action后调用这个方法那么父层View就不会再调用onInterceptTouchEvent了,也无法截获以后的action;

  3. 屏蔽左侧菜单拖拽出来(当第0个页面是可以拖拽出左侧菜单)

    a. 当前选项卡是第一个选项卡时;选项卡可以调出;

    b. 否则,滑动页面实现选项卡之间的滑动选择;

    if(position==0){
        //SlidingMenu可以全屏滑动
        MainActivity mainActivity = (MainActivity) context;
    	mainActivity.getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    }else{
        //SlidingMenu不可以滑动
        MainActivity mainActivity = (MainActivity) context;
    	mainActivity.getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE));
    }
    

6. 页签详情页面TabDetailPager布局和配置联网

  1. 页签详情数据访问和解析

    a. 页签详情数据访问并缓存

    b. 页签详情页面数据实体类和数据解析

    TabDetailBean bean = gson.fromJson(json, TabDetailBean.class);
    
  2. 顶部新闻ViewPager数据的绑定&添加红点

    a. 设置适配器和xUtils3使用

    b. 顶部新闻的描述和点的设置

    顶部新闻用到 ViewPager ;动态添加点,则不需要设置点击事件,只需要绑定 ViewPager 即可;

8. 列表新闻数据填充

  1. 列表新闻ListVeiw设置适配器

    a. 设置适配器;

    b. 设置 item 布局;

    c. 设置listView拖拽不变黑;去除 Android 低版本 ListView 边缘处模糊效果;在 ListView 中:

    android:cacheColorHint="@android:color/transparent"
    android:fadingEdge="none"
    
  2. 顶部新闻以ListView头部方式呈现;mListView.addHeaderView(topnewsView);

盲区

  1. 跟不上节奏是最大的盲区!
  2. 内存溢出!第一次接触内存溢出,是因为网络请求的图片太大,而没有对其进行压缩处理,所以在频繁操作手机时就会闪退;
  3. 本博客根据尚硅谷项目实战: 北京新闻.学习整理;

其他笔记

新闻APP其他笔记

  1. day01
    第一天的学习笔记: 新闻APP01.
  2. day02
    第二天的学习笔记: 新闻APP02.
  3. day03
    第三天的学习笔记: 新闻APP03.
  4. day04
    第四天的学习笔记: 新闻APP04.
  5. day05
    第五天的学习笔记: 新闻APP05.
  6. day06
    第六天的学习笔记:新闻APP06.
  7. day07
    第七天的学习笔记:新闻APP07.

购物商城APP学习笔记

购物商城APP学习笔记:购物商城

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liusaisaiV1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值