ViewPager+Fragment替代TabHost效果的简单示例
本示例旨在展示fragment替代tabhost的效果,具体的业务逻辑还要根据这个示例进行扩展。
效果图如下:

主Activity代码:
package com.llb.view; import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import com.llb.adapter.MyViewPagerAdapter;
import com.llb.fragment.ActivityFragment;
import com.llb.fragment.FriendFragment;
import com.llb.fragment.JobFragment; public class MainActivity extends FragmentActivity implements OnPageChangeListener {
private ViewPager pager;
private PagerAdapter mAdapter; private ArrayList<Fragment> fragments;
private ArrayList<RadioButton> title = new ArrayList<RadioButton>();// 三个标题 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);// /slidingmenu里面重写了
initView();// 初始化控件
initTitle();
initViewPager();
} /**
* 初始化视图
*/
private void initView() {
pager = (ViewPager) findViewById(R.id.pager);// 初始化控件
fragments = new ArrayList<Fragment>();// 初始化数据
fragments.add(new ActivityFragment());
fragments.add(new JobFragment());
fragments.add(new FriendFragment());
} /**
* 初始化ViewPager
*/
private void initViewPager() {
mAdapter = new MyViewPagerAdapter(getSupportFragmentManager(), fragments);
pager.setAdapter(mAdapter);
pager.setOnPageChangeListener(this);
pager.setCurrentItem(0);// 设置成当前第一个
} /**
* 初始化几个用来显示title的RadioButton
*/
private void initTitle() {
title.add((RadioButton) findViewById(R.id.title1));// 三个title标签
title.add((RadioButton) findViewById(R.id.title2));
title.add((RadioButton) findViewById(R.id.title3));
title.get(0).setOnClickListener(new MyOnClickListener(0));// 设置响应
title.get(1).setOnClickListener(new MyOnClickListener(1));
title.get(2).setOnClickListener(new MyOnClickListener(2));
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} /**
* 重写OnClickListener的响应函数,主要目的就是实现点击title时,pager会跟着响应切换
*
* @author llb
*
*/
private class MyOnClickListener implements OnClickListener {
private int index; public MyOnClickListener(int index) {
this.index = index;
} @Override
public void onClick(View v) {
pager.setCurrentItem(index);// 把viewpager的视图切过去,实现捏造title跟pager的联动
title.get(index).setChecked(true);// 设置被选中,否则布局里面的背景不会切换
} } /**
* 下面三个是OnPageChangeListener的接口函数
*/
@Override
public void onPageScrollStateChanged(int arg0) {
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
} @Override
public void onPageSelected(int arg0) {
Log.i("slide", "onPageSelected+agr0=" + arg0);
title.get(arg0).setChecked(true);// 保持页面跟按钮的联动
}
}
Fragment 页面 ,贴一个的代码,其他2个与此类似
package com.llb.fragment; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import com.llb.view.R; public class ActivityFragment extends Fragment {
private View view;// 缓存页面 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("slide", "ActivityFragment--onCreate");
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.i("slide", "ActivityFragment-onCreateView");
if (view == null) {
view = inflater.inflate(R.layout.activity_fragment, container, false);
}
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);// 先移除
}
return view;
} @Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i("slide", "ActivityFragment--onPause");
} @Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i("slide", "ActivityFragment--onStop");
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("slide", "ActivityFragment--onDestroy");
}
}
MyViewPagerAdapter的代码:
package com.llb.adapter; import java.util.ArrayList; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
/**
* 这个adapter里面有Fragment数组
* @author llb
*
*/
public class MyViewPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragments;//需要添加到上面的Fragment public MyViewPagerAdapter(FragmentManager fm) {
super(fm);
}
/**
* 自定义的构造函数
* @param fm
* @param fragments ArrayList<Fragment>
*/
public MyViewPagerAdapter(FragmentManager fm,ArrayList<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int arg0) {
return fragments.get(arg0);//返回Fragment对象
}
@Override
public int getCount() {
return fragments.size();//返回Fragment的个数
}
}
整个项目源码如下:http://download.csdn.net/detail/abc13939746593/6656809
ViewPager+Fragment替代TabHost效果的简单示例的更多相关文章
- Android零基础入门第70节:ViewPager轻松完成TabHost效果
上一期学习了ViewPager的简单使用,本期一起来学习ViewPager的更多用法. 相信很多同学都使用过今日头条APP吧,一打开主界面就可以看到顶部有很多Tab,然后通过左右滑动来切换,就可以通过 ...
- Android使用Fragment实现TabHost效果
现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上, ...
- ViewPager+Fragment 滑动菜单效果 实现步骤
1.xml中引用ViewPager <android.support.v4.view.ViewPager android:id="@+id/viewPa ...
- Android - ViewPager+Fragment初始化问题
Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题. ViewPager初始化时会预加载前后的2个页面,即 ...
- 转:ViewPager+Fragment基本使用方法(附源码)
ViewPager+Fragment可以做出多页面滑动效果,让我们的应用程序界面操作起来更加灵活 对于ViewPager和Fragment组件还不熟悉的朋友,可以先看看相关的资料 首先在activit ...
- android 中的 ViewPager+ Fragment
android的Viewpager 的各种经常的用法,朋友问我要过,所以就稍微总结一下, ViewPager + Fragment 经常用到 代码是从 actionbarsherlock 中提取 ...
- [置顶]
xamarin Tablayout+Viewpager+Fragment顶部导航栏
最近几天不忙,所以把项目中的顶部导航栏的实现归集一下.android中使用TabLayout+ViewPager+Fragment制作顶部导航非常常见,代码实现也比较简单.当然我这个导航栏是基于xam ...
- Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- Android ViewPager + Fragment的布局
ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...
随机推荐
- 核稀疏表示分类(KSRC)
参考:<Kernel SparseRepresention-Based Classifier> 原文地址:http://www.cnblogs.com/Rosanna/p/3372153. ...
- Git PHP提交
做了个小的DEMO,可以查看: https://github.com/feixiang/webgit.git 这几天一直在郁闷的事情. Git在shell里面执行得好好的,apache运行用户也改成了 ...
- mac 安装mysql 报错“ERROR 2002 (HY000): Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2)” 解决办法
首先安装 homebrew 再 brew install mysql 之后连接 mysql 无论是登录还是修改初始密码都会报如下的错误 ERROR 2002 (HY000): Can not conn ...
- 用Delphi创建服务程序
用Delphi创建服务程序 日期:2005年11月29日 作者:sunmohe 人气: 3154 查看:[大字体 中字体 小字体] Windows 2000/XP和2003等支持一种叫做"服 ...
- Project Euler 91:Right triangles with integer coordinates 格点直角三角形
Right triangles with integer coordinates The points P (x1, y1) and Q (x2, y2) are plotted at integer ...
- 欧拉工程第57题:Square root convergents
题目链接 Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; impo ...
- A. Counting Kangaroos is Fun(贪心)
#include<stdio.h> #include<algorithm> using namespace std; ]; int main() { int i,n,high; ...
- SQLite数据库的体系结构(翻译自sqlite.org)
$1 简介 本文档描述了SQLite库的体系结构,这些信息对那些想理解和修改SQLite的内部工作机制的人是有用的. 下图显示了SQLite的主要组成部件及其相互关系,下面的内容将描述每一 ...
- Git教程之工作区和暂存区(5)
工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
- phantomjs使用说明
phantomjs使用说明 12条评论 phantomjs实现了一个无界面的webkit浏览器.虽然没有界面,但dom渲染.js运行.网络访问.canvas/svg绘制等功能都很完备,在页面抓取. ...