viewPager嵌套fragment
*第一站效果图
*滑动到第三种的效果图
第一步:适配器的创建(就是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相关推荐
- android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)
之前写了Android ViewPager+Fragment(使用问题处理),封装了一个BaseFragment,对于简单使用ViewPager+Fragment而言,是没有问题的. 不过,ViewP ...
- NestedScrollView、RecycleView、ViewPager 嵌套常见问题
在开发中我们经常会用到 NestedScrollView 和 RecycleView,一般情况下这两种布局是不需要进行嵌套的,很多情况下 RecycleView 就可以自行解决,但是毕竟是一般情况,因 ...
- Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果
加载单个fragment效果 头部标题多个fragment ...
- Android ViewPager嵌套ViewPager+Fragment问题
最近在项目中又遇到了ViewPager互相嵌套的问题,代码实现很简单,主要可能出现的问题是子ViewPager的fragment滑动出现白屏,这个问题的出现是FragmentManager方法调用错误 ...
- Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment
前几天,项目中要实现这么一个功能.就配置了下.其实很简单,首先 需要阅读下我转载的前两篇文章,都是转载的郭神的,写的非常好.我的项目中逢者必用,其实就相当于一个很好的框架来使用,非常方便. 前两篇的项 ...
- Android两个tab吸顶,Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每
Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每 Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每个 ...
- Fragment嵌套Fragment
问题1.fragment嵌套fragment不显示问题 通常时候,我们制作底部Tab切换,会用到fragment.即一个Activity下,使用4种fragment.这次遇到的问题是关于fragmen ...
- 关于ViewPager嵌套ViewPager左右滑动冲突解决方法
情况如下,TabLayout+ViewPager+Fragment,其中一个Fragment里面又嵌套了一层TabLayout+ViewPager+Fragment,运行的时候出现了两个情况. 1.子 ...
- Android开发-Fragment嵌套Fragment
Android开发-Fragment嵌套Fragment 前言 使用依赖 远程仓库地址 布局实现 使用控件 xml代码 Java实现 效果图 项目地址 前言 在大多数公司中,他们会尽量少写Activi ...
最新文章
- yii2服务器无法加载文件,yii2查看服务器500错误的方法
- 【ACM】二叉搜索树(Binary Search Tree /BS Tree) 小结
- Python中将两个列表(list)数据zip起来
- 【转蝈蝈俊.net 】SQL Server 2005 配置发送邮件
- 【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )
- localdate获取几个月前_关于近期使用java8中LocalDateTime的总结
- WRF-Chem User Guide3.9.1.1 部分内容翻译
- python读文件en_python 点云las、laz文件的读取、写入、压缩
- 不同对象的通话是时长​
- anaconda base环境_anaconda中安装packages:pip还是conda install?
- 作者:刘诗凯(1983-),男,华为大数据分析产品部主任工程师。
- 小汤学编程之MySQL经典例题——表的创建与查询
- mappedby 详解
- Android 打印之将文字转换成 Bitmap 图片,再转换成Bytes 数组 进行打印
- 服务器iis建站维护,云服务器iis建站教程
- 医学知识-CT的窗宽窗位
- 【渝粤教育】电大中专常见病药物治疗 (2)_1作业 题库
- 凡拓数字通过注册:年营收7亿 伍穗颖夫妇控制43%股权
- 新型前端学习成长计划路线规划
- 基础题库:10 带余除法
热门文章
- 云端图片处理工具Cloudinary强势出世 Photoshop鸭梨山大
- 清华大学python基础_清华大学出版社-图书详情-《Python基础入门-微课视频版》
- Ubuntu - 搭建samba服务器
- 变送器分类及产品的选择
- 一文读懂5G无线通信与4G的典型区别
- 深度残差网络(ResNet)之ResNet34的实现和个人浅见
- WordPress自媒体主题:Zibll V3.0 bate(免费下载)
- 未来十年 计算机人才缺口大吗,科技强国:未来十年,三个人才缺口大的金牌工科专业,年薪不用愁...
- Win10 的 VMware 中安装 UOS 20,在 UOS 中安装 QtCreator 及搭建 DTK 开发环境
- 2021年中国义务教育学校数、招生数、在校生数及未来发展趋势分析[图]