代码比较简单而且已经有很多的注释

package com.jay.fragmentdemo4;import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;/*** Created by Coder-pig on 2015/8/28 0028.*/
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener,ViewPager.OnPageChangeListener {//UI Objectsprivate TextView txt_topbar;private RadioGroup rg_tab_bar;private RadioButton rb_channel;private RadioButton rb_message;private RadioButton rb_better;private RadioButton rb_setting;private ViewPager vpager;private MyFragmentPagerAdapter mAdapter;//几个代表页面的常量public static final int PAGE_ONE = 0;public static final int PAGE_TWO = 1;public static final int PAGE_THREE = 2;public static final int PAGE_FOUR = 3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//getSupportFragmentManager()返回一个fragmentManager的对象mAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());bindViews();rb_channel.setChecked(true);}private void bindViews() {//一个在顶部的提醒文本txt_topbar = (TextView) findViewById(R.id.txt_topbar);rg_tab_bar = (RadioGroup) findViewById(R.id.rg_tab_bar);rb_channel = (RadioButton) findViewById(R.id.rb_channel);rb_message = (RadioButton) findViewById(R.id.rb_message);rb_better = (RadioButton) findViewById(R.id.rb_better);rb_setting = (RadioButton) findViewById(R.id.rb_setting);//RadioGroup监听rg_tab_bar.setOnCheckedChangeListener(this);//这里是滑动页面的布局vpager = (ViewPager) findViewById(R.id.vpager);vpager.setAdapter(mAdapter);vpager.setCurrentItem(PAGE_ONE);//ViewPager监听vpager.addOnPageChangeListener(this);}//这个是按下RadioButton的响应的事件@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId) {case R.id.rb_channel:vpager.setCurrentItem(PAGE_ONE);break;case R.id.rb_message:vpager.setCurrentItem(PAGE_TWO);break;case R.id.rb_better:vpager.setCurrentItem(PAGE_THREE);break;case R.id.rb_setting:vpager.setCurrentItem(PAGE_FOUR);break;}}//重写ViewPager页面切换的处理方法@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {}
//滑动的方法@Overridepublic void onPageScrollStateChanged(int state) {//state的状态有三个,0表示什么都没做,1正在滑动,2滑动完毕if (state == 2) {switch (vpager.getCurrentItem()) {case PAGE_ONE:rb_channel.setChecked(true);break;case PAGE_TWO:rb_message.setChecked(true);break;case PAGE_THREE:rb_better.setChecked(true);break;case PAGE_FOUR:rb_setting.setChecked(true);break;}}}
}
package com.jay.fragmentdemo4;import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;/*** Created by Jay on 2015/8/31 0031.*/
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {private final int PAGER_COUNT = 4;private MyFragment1 myFragment1 = null;private MyFragment2 myFragment2 = null;private MyFragment3 myFragment3 = null;private MyFragment4 myFragment4 = null;public MyFragmentPagerAdapter(FragmentManager fm) {super(fm);myFragment1 = new MyFragment1();myFragment2 = new MyFragment2();myFragment3 = new MyFragment3();myFragment4 = new MyFragment4();}@Overridepublic int getCount() {return PAGER_COUNT;}@Overridepublic Object instantiateItem(ViewGroup vg, int position) {return super.instantiateItem(vg, position);}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {System.out.println("position Destory" + position);super.destroyItem(container, position, object);}//切换到哪个fragment就new 相应的Fragment,显示一个fragment@Overridepublic Fragment getItem(int position) {Fragment fragment = null;switch (position) {//fragment与页面绑定case MainActivity.PAGE_ONE:fragment = myFragment1;break;case MainActivity.PAGE_TWO:fragment = myFragment2;break;case MainActivity.PAGE_THREE:fragment = myFragment3;break;case MainActivity.PAGE_FOUR:fragment = myFragment4;break;}return fragment;}}

已经发现一个问题就是 隔着切换底部标签的时候(例如先点击提醒,然后点击我的)在第一个fragment调到第三个fragment的时候会出现 第二个fragment.目前我还没有想出解决办法,如果小伙伴知道,欢迎留言,谢谢。

现在知道是什么原因了,并找到解决的办法

demo下载地址  http://pan.baidu.com/s/1o8GN5N0

这个代码存在的一个bug ,当频繁的左右滑动和点击底部标签的时候会卡死

解决办法是:

参考链接:

http://ju.outofmemory.cn/entry/138935

对BottomTagFragment的理解相关推荐

  1. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  2. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  3. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  4. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

  5. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  6. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

  7. mapreduce理解_大数据

    map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...

  8. 文件句柄和文件描述符的区别和理解指针

    句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数,Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.Windows句柄有点象C语言中的文件句柄. ...

  9. 通俗理解条件熵-数学

    就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...

最新文章

  1. java调用python的函数_java如何调用python的.py文件,以及如何执行里面的函数,和创建...
  2. 竞赛人必备的100篇NLP论文
  3. Apache JMeter rmi 反序列化 cve-2018-1297
  4. jQuery中slice()方法用法实例
  5. Intent.FLAG_ACTIVITY_CLEAR_TOP 的使用注意
  6. PHP 设计模式 笔记与总结(8)策略模式
  7. linux启动管理,Linux启动管理 详述
  8. sklearn文档-第一次笔记
  9. Codeforces 374A - Inna and Pink Pony
  10. 淮教鞭:完全免费的电脑版电子教鞭软件 |含淮教鞭的使用说明 | 电脑屏幕画笔软件哪个最好用?
  11. js 判断数组的4种方法
  12. Coursera视频无法播放问题解决
  13. 商务网站建设与维护【12】
  14. 程序员如何找对象(1)
  15. 前端利用高德实时定位_web使用高德地图
  16. 拼多多登录一直连接服务器,拼多多有自己的服务器吗
  17. 如何成为IC验证工程师?
  18. 使用docker搭建xss挑战之旅环境
  19. ALNS求MDHVRPTW问题 python实现
  20. 机器学习_深度学习毕设题目汇总——皮肤_癌症_糖尿病

热门文章

  1. unity 的Cinemachine组件运用
  2. mysql 左右值算法详解_无限分类左右值算法的常规操作逻辑
  3. OpenShift 4 - Service Mesh使用入门
  4. 将动态路由、布局和RouteViews添加到Blazor应用程序组件
  5. 使用WPF动态资源在Gtk3 C#中进行本地化
  6. 华为宣布方舟编译器将于8月31日
  7. 使用Entity Framework和Web API的ASP.NET Core Blazor CRUD
  8. clear linux安装教程,Clear Linux OS特性介绍,附下载地址
  9. 总线与微命令实验总结_【干货】总线制?分线制?分不清楚看看这篇文章就知道了...
  10. android重复拉起app首页_Android进程管理:Framework层概念