Android Tab类型主界面 Fragment+TabPageIndicator+ViewPager
文章地址: Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
1、使用ViewPager + PagerAdapter
每个页面的内容都在同一个Activity中,维护起来会比较麻烦
实现:
在页面上加入ViewPager控件。
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"> </android.support.v4.view.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中不同,但同样很好。
将自己写代码实现后两种方式。
参考:
Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
Android Tab类型主界面 Fragment+TabPageIndicator+ViewPager的更多相关文章
- Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977 Android如今实现Tab类型的界面方式越来越多,今天就把常见的 ...
- android Tab 类型切换界面
实现方案:viewpager + fragment + FragmentPagerAdapter 效果图: 可以左右滑动切换选项卡,或者点击: 如果想使用fragment的时候又想可以左右滑动,就可以 ...
- Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)
另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所 ...
- Android应用经典主界面框架之中的一个:仿QQ (使用Fragment, 附源代码)
备注:代码已传至https://github.com/yanzi1225627/FragmentProject_QQ 欢迎fork,如今来审视这份代码,非常多地方写的不太好,欢迎大家指正.有时间我会继 ...
- 安卓开发_慕课网_Fragment实现Tab(App主界面)
学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...
- 安卓开发_慕课网_ViewPager实现Tab(App主界面)
学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...
- Android AsynTask更新主界面
虽然今天礼拜六还在加班,但是在等接口,所以还是有很多时间来自己学点东西的,所以就接着昨天的来.今天继续学的是不通过主线程来更新主线程的界面的问题. 昨天是用的开启线程调用Handler来更新线程,那个 ...
- 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)
学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...
- [android] 新闻客户端主界面部分
当我们使用activity加fragment的时候,每个界面都要建立一个fragment,每个fragment里面都要重写onCreate(),onCreateView(),onActivityCre ...
随机推荐
- day4-课堂代码
# ---------------------------------------------------------------------- # def my_function1(name, ad ...
- 利用RMAN恢复整个数据库
利用RMAN恢复整个数据库案例一 适合场合:恢复的目录一致,同时备份的过程中有归档日志 恢复的数据库目录和down机的数据库一致,还有一个就是RMAN备份的时候已经备份了归档日志. 备份脚本: run ...
- oracle 查看用户所在的表空间
查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * fr ...
- mysql row日志格式下 查看binlog sql语句
有时候我们需要使用row作为binlog的日志格式,即配置文件使用了binlog_format= row 参数 这样以来,我们在查看数据库binlog内容时候,就看不到增删改查的具体语句了,在数据库恢 ...
- 学习Kali Linux必须知道的几点
Kali Linux 在渗透测试和白帽子方面是业界领先的 Linux 发行版.默认情况下,该发行版附带了大量入侵和渗透的工具和软件,并且在全世界都得到了广泛认可.即使在那些甚至可能不知道 Linux ...
- PAT B1027 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两 ...
- Python2.7-netrc
netrc 模块,用于解析和封装 netrc 类型的文件,这种类型的文件用于 unix 的 ftp 程序和其他 ftp 客户端.----------------不知道到底是个什么东西 1.模块对象 1 ...
- dubbo和rabbitmq对比
随着项目越来越大,局势就是项目拆分,大项目拆分成很多项目,各种技术也应允而生.从应用交互层面,按我的理解dubbo和rabbitmq就对比分析进行学习.dubbo和zookeeper结合 1.zoo ...
- ceph 池管理
存储池的概念:比如有10个1T的硬盘,作为一个集群,那就可以在这个集群里划分几个池,给不同的组件使用 问题描述: 删除pool的时候提示下面的错误: ceph osd pool delete test ...
- URL Encode
用VC实现post数据常常会遇到URL编码问题 在此封装一个工具类进行UTF8编码的转换 源码来自php source code 只是简单的封装给C++调用 //URL 编解码类 //来自PHP源 ...