ViewPager,Fragment制作带底部导航栏的滑动界面
2019-04-09 20:45
246 查看
版权声明:版权归本原作者木水先生所有,欢迎转载 https://blog.csdn.net/weixin_39963192/article/details/89075857
读起来稍有难度,需要一点耐心来看。
首先先看一下,mainActivity布局。我已经对布局文件进行简化,在这里仅仅给大家留出来控件的类型,内部结构,读者可自行设计。
[code]<RelativeLayout> <RadioGroup> <RadioButton/> <RadioButton/> <RadioButton/> <RadioButton/> </RadioGroup> <android.support.v4.view.ViewPager/> </RelativeLayout>
创建一个MainActivity,其中声明四个PAGE的常量指代对应的Fragment。
在RadioGroup放入四个RadioButton(单选按钮,RadioGroup中的RadioButton每次只能有一个被选中)。
为RadioButton添加点击事件,并为adapter(后边会详细讲到)设置当前界面
onPageScrollStateChanged中的state参数有三种状态:
- 0:什么都没做
- 1:开始滑动
- 2:滑动结束
[code]public class MainActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener, ViewPager.OnPageChangeListener { 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; private RadioGroup rg_tab_bar; private RadioButton rb_deal; private RadioButton rb_job; private RadioButton rb_chater; private RadioButton rb_mine; private ViewPager vPager; private MainFragPagerAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAdapter = new MainFragPagerAdapter(getSupportFragmentManager()); bindViews(); rb_deal.setChecked(true); } private void bindViews(){ rg_tab_bar = (RadioGroup) findViewById(R.id.rg_tab_bar); rb_deal = (RadioButton)findViewById(R.id.rb_deal); rb_job = (RadioButton)findViewById(R.id.rb_job); rb_chater = (RadioButton)findViewById(R.id.rb_chater); rb_mine = (RadioButton)findViewById(R.id.rb_mine); rg_tab_bar.setOnCheckedChangeListener(this); vPager = (ViewPager)findViewById(R.id.vpager); vPager.setAdapter(mAdapter); vPager.setCurrentItem(0); vPager.addOnPageChangeListener(this); } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.rb_deal: vPager.setCurrentItem(PAGE_ONE); break; case R.id.rb_job: vPager.setCurrentItem(PAGE_TWO); break; case R.id.rb_chater: vPager.setCurrentItem(PAGE_THREE); break; case R.id.rb_mine: vPager.setCurrentItem(PAGE_FOUR); break; } } @Override public void onPageScrollStateChanged(int state) { if(state == 2){ switch (vPager.getCurrentItem()){ case PAGE_ONE: rb_deal.setChecked(true); break; case PAGE_TWO: rb_job.setChecked(true); break; case PAGE_THREE: rb_chater.setChecked(true); break; case PAGE_FOUR: rb_mine.setChecked(true); break; } } } }
下边来看adapter,我们在这里继承FragmentPagerAdapter,其中定义了四个Fragment,和一个用来存储fragment数量的全局静态常量PAGE_COUNT。重写getItem函数,这个item创建vpager时会自动调用,判断当前遍历的位置,返回对应的Fragment的对象,重写getCount()函数,返回ViewPager中的碎片数量。
对比FragmentPagerAdapter和FragmentStatePagerAdapter:
- 两者都继承PagerAdapter
- FragmentPagerAdapter保存加入的所有fragment对象,即每次重新进入该界面(界面距离相差2),重新执行creatview方法,但是不执行类的构造方法。适用于界面数量比较小。
- FragmentStatePagerAdapter,当重新进入该界面(界面距离相差2),需要重新执行类的构造方法。适用于有大量界面。
[code]public class MainFragPagerAdapter extends FragmentPagerAdapter { public final int PAGE_COUNT = 4; private Fragment_1 myFragment1 = null; private Fragment_2 myFragment2 = null; private Fragment_3 myFragment3 = null; private Fragment_4 myFragment4 = null; public MainFragPagerAdapter(FragmentManager fm) { super(fm); myFragment1 = new Fragment_1(); myFragment2 = new Fragment_2(); myFragment3 = new Fragment_3(); myFragment4 = new Fragment_4(); } @Override public Fragment getItem(int position) { Fragment fragment = null; switch (position){ 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; } @Override public int getCount() { return PAGE_COUNT; }
创建四个Fragment,自行加入布局。
相关文章推荐
- 安卓开发--应用市场的界面制作(一)--viewpager+fragment实现可滑动的底部导航栏
- FragmentTabHost+ViewPager实现滑动的底部导航栏
- Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面
- Android RadioGroup+ViewPager+ActionBar实现仿微信6.0界面(底部滑动菜单栏+导航栏)
- Android例子—Fragment实例讲解—底部导航栏+ViewPager滑动切换页面
- Android基础入门教程——5.2.4 Fragment实例精讲——底部导航栏+ViewPager滑动切换页面
- ViewPager+Fragment滑动切换页面(RadioButton底部导航栏)
- Fragment实例精讲——底部导航栏+ViewPager滑动切换页面
- android app主题UI界面框架搭建 tablayout+Viewpager+fragment 导航栏滑动和点击切换界面
- TabLayout+ViewPager+Fragment实现顶部或底部导航栏
- 使用ViewPager和Fragment同时实现点击底部Tab切换和手势滑动切换Fragment
- Android Fragment + ViewPager 实现类微信 底部导航栏 和 显示消息提醒
- Radio+不可滑动的viewpager实现底部导航栏
- 首页、底部导航栏:TabLayout+ViewPager+Fragment使用
- ViewPager+Fragment实现界面滑动
- Android之RadioGroup+ViewPager制作的底部导航栏
- Fragment和ViewPager实现底部导航栏
- ViewPager+Fragment制作侧滑导航栏
- ViewPager+Fragment滑动切换界面
- Viewpager+fragment实现底部导航栏