ViewPager+Fragment替代TabHost效果的简单示例

时间:2022-08-26 20:36:30

本示例旨在展示fragment替代tabhost的效果,具体的业务逻辑还要根据这个示例进行扩展。

效果图如下:

ViewPager+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效果的简单示例的更多相关文章

  1. Android零基础入门第70节:ViewPager轻松完成TabHost效果

    上一期学习了ViewPager的简单使用,本期一起来学习ViewPager的更多用法. 相信很多同学都使用过今日头条APP吧,一打开主界面就可以看到顶部有很多Tab,然后通过左右滑动来切换,就可以通过 ...

  2. Android使用Fragment实现TabHost效果

    现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上, ...

  3. ViewPager&plus;Fragment 滑动菜单效果 实现步骤

    1.xml中引用ViewPager     <android.support.v4.view.ViewPager             android:id="@+id/viewPa ...

  4. Android - ViewPager&plus;Fragment初始化问题

    Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题. ViewPager初始化时会预加载前后的2个页面,即 ...

  5. 转:ViewPager&plus;Fragment基本使用方法&lpar;附源码&rpar;

    ViewPager+Fragment可以做出多页面滑动效果,让我们的应用程序界面操作起来更加灵活 对于ViewPager和Fragment组件还不熟悉的朋友,可以先看看相关的资料 首先在activit ...

  6. android 中的 ViewPager&plus; Fragment

    android的Viewpager 的各种经常的用法,朋友问我要过,所以就稍微总结一下, ViewPager + Fragment 经常用到  代码是从   actionbarsherlock 中提取 ...

  7. &lbrack;置顶&rsqb;&NewLine; xamarin Tablayout&plus;Viewpager&plus;Fragment顶部导航栏

    最近几天不忙,所以把项目中的顶部导航栏的实现归集一下.android中使用TabLayout+ViewPager+Fragment制作顶部导航非常常见,代码实现也比较简单.当然我这个导航栏是基于xam ...

  8. Android开发之漫漫长途 Fragment番外篇——TabLayout&plus;ViewPager&plus;Fragment

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  9. Android ViewPager &plus; Fragment的布局

    ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...

随机推荐

  1. ADO&period;NET 读取Excel文件,并作数据源

    项目中需要用的功能,贴上代码了. 需要注意的地方:配置Web.config的时候要注意版本问题! //若是在Web.config中配置数据源,如下 <add key="ExcelCon ...

  2. Swift 2&period;0 异常处理

    转自:http://www.jianshu.com/p/96a7db3fde00 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主 ...

  3. 判断A树是否包含B树结构

    题目:输入两棵二叉树A和B,判断B是不是A的子结构 分析:根据数的遍历方法,首先想到的是采用递归的方式要更简单些,树A从根节点进行遍历,首先判断与B的根节点值是否相等,如果相等则进行递归遍历验证,否则 ...

  4. 【Java】Java XML 技术专题

    XML 基础教程 XML 和 Java 技术 Java XML文档模型 JAXP(Java API for XML Parsing) StAX(Streaming API for XML) XJ(XM ...

  5. Delphi判断文件是否正在被使用(CreateFile也可以只是为了读取数据,而不是创建)

    首先,我们先来认识下CreateFile函数,它的原型如下   HANDLE CreateFile( LPCTSTR lpFileName,    //指向文件名的指针 DWORD dwDesired ...

  6. JS随机显示一张图片

    var images=['p1.jpg','p2.jpg','p3.jpg']; var url=images[Math.floor(Math.random()*images.length)]; co ...

  7. NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)

    上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...

  8. binlog2sql实现MySQL误操作的恢复

    对于MySQL数据库中的误操作删除数据的恢复问题,可以使用基于MySQL中binlog做到类似于闪回或者生成反向操作的SQL语句来实现,是MySQL中一个非常实用的功能.原理不难理解,基于MySQL的 ...

  9. vncserve安装配置 (转)

    使用服务器时,利用远程桌面是非常方便的,否则需要跑到服务器机房操作非常的费事,或者需要远程操作机器是也可以使用,一般的操作系统都会带有远程桌面功能,但是不如第三方的的软件好用,对于Linux系统常用的 ...

  10. 创建自定义graphql-binding

    graphql-binding 是一个比较方便强大的工具,方便我们进行代码生成以及开发gateway的功能 项目初始化 使用prisma cli 使用脚手架 prisma init appdemo ? ...