*第一站效果图 

*滑动到第三种的效果图

第一步:适配器的创建(就是viewpager的adapter)

分析:1,这里有三个函数,根据第一部分的官方文档,可知,对于FragmentPagerAdapter的派生类,只重写getItem(int)和getCount()就可以了。2,对于构造函数,这里必须传入一个Fragment的List集合对象,用于保存滑动的Fragment对象,并且初始化了它

对于构造函数,这里申请了一个Fragment的List对象,用于保存用于滑动的Fragment对象,并在创造函数中初始化:

package adapter;import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;import java.util.ArrayList;
import java.util.List;/*** Created by lovelin on 2016/6/23.*/
public class FragAdapter extends FragmentPagerAdapter {private List<Fragment> fragmentList;/*** 构造函数中就把 管理Fragment的List集合传入进来* 在这里必须实现只重写getItem(int)和getCount()* @param fragmentManager* @param fragmentList*/public FragAdapter(FragmentManager fragmentManager, ArrayList<Fragment> fragmentList) {super(fragmentManager);this.fragmentList = fragmentList;}@Overridepublic Fragment getItem(int position) {return fragmentList.get(position);}@Overridepublic int getCount() {return fragmentList.size();}
}

第二步:Fragment类的创建(就是viewpager滑动时的界面)

*这里根据需求,来显示你的viewpager滑动时候时,一共需要显示的界面(几个界面就有几个fragment,并且每个Fragment都可以做相对应逻辑需求的处理我这里没有做实例,只是单纯的给了颜色区分不同界面),我这里的Deom就只有四个,

*第一个Fargment01的XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#faf"android:orientation="vertical"><TextView
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="我是第一个Fragment"android:textColor="#000"android:textSize="19sp" /></RelativeLayout>

*第一个Fragment01的Java代码

package fragment;import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import com.tzt.viewpagerfragment.R;/*** Created by lovelin on 2016/6/23.*/
public class Fragment01 extends Fragment {@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = View.inflate(getActivity(), R.layout.fragment_01, null);return view;}
}

*第二个fargment的xml 
*略 
*第二个fargment的java代码

================其他几个fragment的xml和代码省略了因为和第一个一样============

第三步:ManiAcivity的操作(主activity的处理,重点哦)

在这里,ViewPager的滑动带动红点的动态移动(这个在很多地方都是用的到,比如新手引导界面,一半的viewpager动画的联动实现等等)

看图 下面由我的Demo代码 里面有非常详细的注释我就不在这里叽叽歪歪了哦


*XML文件

Activity的Java代码


package com.tzt.viewpagerfragment;import android.annotation.TargetApi;
import android.os.Build;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;import java.util.ArrayList;import adapter.FragAdapter;
import fragment.Fragment01;
import fragment.Fragment02;
import fragment.Fragment03;
import fragment.Fragment04;public class MainActivity extends FragmentActivity {private ViewPager viewPager;private ArrayList<Fragment> fragmentList;private FragAdapter fragAdapter;private ImageView iv_red_piont;private LinearLayout ll_container;private int pointMoveDistance;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();}private void initView() {viewPager = (ViewPager) findViewById(R.id.viewPager);//红点的线性布局  (父)ll_container = (LinearLayout) findViewById(R.id.ll_container);//红点iv_red_piont = (ImageView) findViewById(R.id.iv_red_piont);}private void initData() {//存Frangment的listfragmentList = new ArrayList<Fragment>();Fragment01 fragment01 = new Fragment01();Fragment02 fragment02 = new Fragment02();Fragment03 fragment03 = new Fragment03();Fragment04 fragment04 = new Fragment04();fragmentList.add(fragment01);fragmentList.add(fragment02);fragmentList.add(fragment03);fragmentList.add(fragment04);fragAdapter = new FragAdapter(getSupportFragmentManager(), fragmentList);viewPager.setAdapter(fragAdapter);initPointData();//viewager 滑动时候远点的动画initViewPager();}private void initPointData() {for (int i = 0; i < fragmentList.size(); i++) {//初始化小圆点ImageView point = new ImageView(this);point.setBackgroundResource(R.drawable.shape_point_gray);//获取父布局参数,在初始化参数LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);if (i > 0) {layoutParams.leftMargin = 10;}point.setLayoutParams(layoutParams);ll_container.addView(point);}}private void initViewPager() {viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {/***当页面滑动的过程中调用的方法* positionOffset,移动偏移的百分比* position当前的位置* positionOffsetPixels  具体移动了多少像素*/@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {//更新小红点的距离int leftMargin = (int)(pointMoveDistance* positionOffset)+position*pointMoveDistance;//计算小红点当前左边的距离//先拿到小红点爹的布局参数RelativeLayout.LayoutParams parmas = (RelativeLayout.LayoutParams) iv_red_piont.getLayoutParams();//再更新他的leftmargin实现移动parmas.leftMargin = leftMargin;//最后再给子view设置参数iv_red_piont.setLayoutParams(parmas);}@Overridepublic void onPageSelected(int position) {}@Overridepublic void onPageScrollStateChanged(int state) {}});//xml的监听iv_red_piont.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@TargetApi(Build.VERSION_CODES.JELLY_BEAN)@Overridepublic void onGlobalLayout() {iv_red_piont.getViewTreeObserver().removeOnGlobalLayoutListener(this);//获取到两个fragment移动时,两个点需要移动的距离pointMoveDistance = ll_container.getChildAt(1).getLeft() - ll_container.getChildAt(0).getLeft();}});}}

第四步:可能出现的问题

*问题:在MainActivity中,当写到这句:fragments.add(new Fragment1()); 向Fragment列表中添加Fragement对象实例时,会提示“无法将Fragment1()转换为fragment”

*解决办法 :这是因为导入包不一致,一般的问题在于:在Fragment1中导入的是android.app.Fragment, 而在这里导入类确是:android.support.v4.app.Fragment,包不同当然无法转换,统一导入为android.support.v4.app.Fragment之后就正常了.参考文章《android之cannot convert from Fragment1 to Fragment》

转载自:https://blog.csdn.net/tongzhengtong/article/details/51747053

viewPager嵌套fragment相关推荐

  1. android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)

    之前写了Android ViewPager+Fragment(使用问题处理),封装了一个BaseFragment,对于简单使用ViewPager+Fragment而言,是没有问题的. 不过,ViewP ...

  2. NestedScrollView、RecycleView、ViewPager 嵌套常见问题

    在开发中我们经常会用到 NestedScrollView 和 RecycleView,一般情况下这两种布局是不需要进行嵌套的,很多情况下 RecycleView 就可以自行解决,但是毕竟是一般情况,因 ...

  3. Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果

    加载单个fragment效果                                                                        头部标题多个fragment ...

  4. Android ViewPager嵌套ViewPager+Fragment问题

    最近在项目中又遇到了ViewPager互相嵌套的问题,代码实现很简单,主要可能出现的问题是子ViewPager的fragment滑动出现白屏,这个问题的出现是FragmentManager方法调用错误 ...

  5. Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment

    前几天,项目中要实现这么一个功能.就配置了下.其实很简单,首先 需要阅读下我转载的前两篇文章,都是转载的郭神的,写的非常好.我的项目中逢者必用,其实就相当于一个很好的框架来使用,非常方便. 前两篇的项 ...

  6. Android两个tab吸顶,Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每

    Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每 Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每个 ...

  7. Fragment嵌套Fragment

    问题1.fragment嵌套fragment不显示问题 通常时候,我们制作底部Tab切换,会用到fragment.即一个Activity下,使用4种fragment.这次遇到的问题是关于fragmen ...

  8. 关于ViewPager嵌套ViewPager左右滑动冲突解决方法

    情况如下,TabLayout+ViewPager+Fragment,其中一个Fragment里面又嵌套了一层TabLayout+ViewPager+Fragment,运行的时候出现了两个情况. 1.子 ...

  9. Android开发-Fragment嵌套Fragment

    Android开发-Fragment嵌套Fragment 前言 使用依赖 远程仓库地址 布局实现 使用控件 xml代码 Java实现 效果图 项目地址 前言 在大多数公司中,他们会尽量少写Activi ...

最新文章

  1. yii2服务器无法加载文件,yii2查看服务器500错误的方法
  2. 【ACM】二叉搜索树(Binary Search Tree /BS Tree) 小结
  3. Python中将两个列表(list)数据zip起来
  4. 【转蝈蝈俊.net 】SQL Server 2005 配置发送邮件
  5. 【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )
  6. localdate获取几个月前_关于近期使用java8中LocalDateTime的总结
  7. WRF-Chem User Guide3.9.1.1 部分内容翻译
  8. python读文件en_python 点云las、laz文件的读取、写入、压缩
  9. 不同对象的通话是时长​
  10. anaconda base环境_anaconda中安装packages:pip还是conda install?
  11. 作者:刘诗凯(1983-),男,华为大数据分析产品部主任工程师。
  12. 小汤学编程之MySQL经典例题——表的创建与查询
  13. mappedby 详解
  14. Android 打印之将文字转换成 Bitmap 图片,再转换成Bytes 数组 进行打印
  15. 服务器iis建站维护,云服务器iis建站教程
  16. 医学知识-CT的窗宽窗位
  17. 【渝粤教育】电大中专常见病药物治疗 (2)_1作业 题库
  18. 凡拓数字通过注册:年营收7亿 伍穗颖夫妇控制43%股权
  19. 新型前端学习成长计划路线规划
  20. 基础题库:10 带余除法

热门文章

  1. 云端图片处理工具Cloudinary强势出世 Photoshop鸭梨山大
  2. 清华大学python基础_清华大学出版社-图书详情-《Python基础入门-微课视频版》
  3. Ubuntu - 搭建samba服务器
  4. 变送器分类及产品的选择
  5. 一文读懂5G无线通信与4G的典型区别
  6. 深度残差网络(ResNet)之ResNet34的实现和个人浅见
  7. WordPress自媒体主题:Zibll V3.0 bate(免费下载)
  8. 未来十年 计算机人才缺口大吗,科技强国:未来十年,三个人才缺口大的金牌工科专业,年薪不用愁...
  9. Win10 的 VMware 中安装 UOS 20,在 UOS 中安装 QtCreator 及搭建 DTK 开发环境
  10. 2021年中国义务教育学校数、招生数、在校生数及未来发展趋势分析[图]