博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Tab类型主界面 Fragment+TabPageIndicator+ViewPager
阅读量:6488 次
发布时间:2019-06-24

本文共 4633 字,大约阅读时间需要 15 分钟。

文章地址: 

 

1、使用ViewPager + PagerAdapter

  每个页面的内容都在同一个Activity中,维护起来会比较麻烦

  实现:

  在页面上加入ViewPager控件。  

  

  创建每个Tab页的信息,并在Activity中获取这些Tab页,加入List<View>中。

     form1 = (LinearLayout) inflater.inflate(R.layout.layout_pager1, null);        form2 = (LinearLayout) inflater.inflate(R.layout.layout_page2, null);        form3 = (LinearLayout) inflater.inflate(R.layout.layout_pager3, null);                listViews.add(form1);        listViews.add(form2);        listViews.add(form3);

  创建PagerAdapter的对象(通过自定义类MyPagerAdapter继承自PagerAdapter),并绑定到ViewPager上。

  自定义的MyPagerAdapter一定要重写destroyItem、instantiateItem、getCount、isViewFromObject。

private class MyPagerAdapter extends PagerAdapter {                @Override        public void destroyItem(ViewGroup container, int position, Object object) {            container.removeView(listViews.get(position));        }                @Override        public Object instantiateItem(ViewGroup container, int position) {            View view = listViews.get(position);            container.addView(view);            return view;        }        @Override        public int getCount() {            // TODO Auto-generated method stub            return listViews.size();        }        @Override        public boolean isViewFromObject(View view, Object obj) {            // TODO Auto-generated method stub            return view == obj;        }            }

  这样一个简单的可以左右滑动的界面就完成了。不过有个明显的缺点,界面上没有可以指示当前在第几个页面的信息,用户也无法明确看到一共有多少个页面。可以像我参考的博客上的例子,在主界面上添加一个Layout,定义几个按钮。也可以使用Activity的getActionBar方法获取当前Activity对应的ActionBar,在ActionBar上添加Tab来指示当前页面。使用ActionBar时,需要为Tab添加TabListener事件,重写onTabSelected方法,当用户选择了对应的Tab页签,ViewPager需要跳转到对应的界面。

      tab.setTabListener(new ActionBar.TabListener() {                                @Override                public void onTabUnselected(Tab tab, FragmentTransaction ft) {                    // TODO Auto-generated method stub                                    }                                @Override                public void onTabSelected(Tab tab, FragmentTransaction ft) {                    // TODO Auto-generated method stub                    String text = tab.getText().toString();                    int selectedIndex = 0;                    switch(text) {                    case PAGE1 :                         selectedIndex = 0;                        break;                    case PAGE2 :                        selectedIndex = 1;                        break;                    case PAGE3 :                        selectedIndex = 2;                        break;                    default:                        selectedIndex = 0;                        break;                    }                                        viewPager.setCurrentItem(selectedIndex);                                        //设置页签上的图片                    for    (int j = 0; j < bar.getTabCount(); j++) {                        Tab tab1 = bar.getTabAt(j);                        if (selectedIndex == j) {                            tab1.setIcon(onIcons[j]);                        } else {                            tab1.setIcon(offIcons[j]);                        }                    }                }                                @Override                public void onTabReselected(Tab tab, FragmentTransaction ft) {                    // TODO Auto-generated method stub                                    }            });

  现在点击页签,就会跳转到对应的页面。但是左右滑动页面的时候,页签并不会跟着变化。再添加页面滑动的事件。

    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {                        @Override            public void onPageSelected(int i) {//                for    (int j = 0; j < bar.getTabCount(); j++) {//                    Tab tab = bar.getTabAt(j);//                    if (i == j) {//                        tab.setIcon(onIcons[j]);//                    } else {//                        tab.setIcon(offIcons[j]);//                    }//                }                bar.selectTab(bar.getTabAt(i));            }                        @Override            public void onPageScrolled(int i, float f, int j) {                // TODO Auto-generated method stub                            }                        @Override            public void onPageScrollStateChanged(int i) {                // TODO Auto-generated method stub                            }        });

  OK,页签和页面可以联动了。

 

 

2、FragmentManager + Fragment

  每个页面的内容分开,但是只能点击按钮换页

 

3、ViewPager + FragmentPagerAdapter

  综合前两种方式,比较好

 

4、TabPageIndicator + ViewPager + FragmentPagerAdapter

  第三方插件,呈现界面与第3中不同,但同样很好。

 

 

将自己写代码实现后两种方式。

参考:

 

转载于:https://www.cnblogs.com/huanyou/p/5127537.html

你可能感兴趣的文章
npm stripts 使用指南
查看>>
城市之间的最短总距离(最小生成树算法)
查看>>
使用CSS为图片添加边框的几种方法
查看>>
实现拖动文件到窗体(控件)
查看>>
对 sql server 数据库的备份进行加密
查看>>
YY博客园UML时序图之博客模块
查看>>
《深入浅出 Java Concurrency》—锁紧机构(一)Lock与ReentrantLock
查看>>
Android Studio开发第二篇创建新项目
查看>>
动画(Animation) 它 (闪烁、左右摇摆、跷跷板等功效)
查看>>
最简单的历史Hibernate获得短暂的
查看>>
CSS3系列三(与背景边框相关样式 、变形处理、动画效果)
查看>>
Freemarker-2.3.22 Demo - No01_获取模板并直接输出
查看>>
概率论机器学习的先验知识(上)
查看>>
[老老实实学WCF] 第六篇 元数据交换
查看>>
oracle 11g密码永不过期
查看>>
Nginx+Keepalived主备切换(包含nginx服务停止)
查看>>
single-row function和muti-row function
查看>>
Win7版IE10浏览器正式版官方下载地址
查看>>
【linux高级程序设计】(第十三章)Linux Socket网络编程基础 4
查看>>
android中画文字的换行 办法(对于遇到canvas.drawText(String s )无法实现换行问题的解决)...
查看>>