精华内容
下载资源
问答
  • Viewpager

    2017-07-16 17:15:59
    ViewPagerViewPager相关FragmentFragment相关
    展开全文
  • viewpager

    2019-06-03 09:17:24
    描述:viewpager+fragment,fragment会由fragmentManager进行管理,viewpager会从fragmentmanager中取fragment,即使list更新,数据也不会更新。fragmentmanager中是否存在已有的fragent主要是根据给fragment设置的...

    缓存问题
    描述:viewpager+fragment,fragment会由fragmentManager进行管理,viewpager会从fragmentmanager中取fragment,即使list更新,数据也不会更新。fragmentmanager中是否存在已有的fragent主要是根据给fragment设置的tag值决定的。而默认都是下面这个方法设置的tag值。当position(tag)值重复的时候就会导致数据错乱问题。要想不使用fragmentManager的缓存,tag值只要设置唯一即可。

    @Override
    public long getItemId(int position) {
        return position;
    }
    
    展开全文
  • ViewPager

    2016-12-05 15:45:55
    ViewPager是安卓3.0以上可以使用的控件,功能就是使视图左右滑动.在android.support.v4.view包下,是个扩展的自定义控件.故使格式:在布局文件里应该是android.support.v4.view.ViewPager 注意ViewPager的内部pager...

    ViewPager是安卓3.0以上可以使用的控件,功能就是使视图左右滑动.在android.support.v4.view包下,是个扩展的自定义控件.故使格式:在布局文件里应该是android.support.v4.view.ViewPager


    注意ViewPager的内部pager页面不能使用Activity与Fragment原因:

    不能使用activity的原因:viewpager中存放是的view控件,activity不能返回view,activity是不能在veiwpager中使用


    不能使用Fragment的原因:(以下是特有现象,但如果不是这种fragment多次嵌套fragment的话,可以使用fragment)

    因为之前已经使用了HomeFragment,在接下来的操作还会有新界面创建,这样就会出现一个Fragment中使用了另一fragment,另一个fragment中又使用了一个fragment的现象,对于小内存的手机来说,容易内存溢出(OOM).


    1.在所要使用的Activity的布局xml文件里定义这个组件,

        <android.support.v4.view.ViewPager   

            android:id="@+id/viewpager"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content" />

     

    2.在Activity里找到ViewPager控件,并得到ViewPager控件对象.

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);

     

    3.准备数据,创建ArrayList集合,在创建一个承载数据类型的bean类,把数据添加到bean类中,再把bean类挨个添加到集合中.

     

    4.为ViewPager设置Adapter适配器

        vewPager.setAdapter(new 自定义的适配器类());

     

    5.创建一个自定义的ViewPager适配器内部类,要继承ViewPager,并复写其方法


      class MyAdapter extends PagerAdapter{

    	//ViewPager滑动的次数

    public int getCount() {

    //设置数小的话,图片到头了就没法循环出现,要想循环播放,一般指定50000次即可.return 50000;

    //且报空指针异常的地方(一般和获取ViewPager当前选中的是第几页有关的都要改为position(当前页数)%list.size()(取余数)

         return list.size();

    }


    提示:如果想要ViewPager能向左滑动,只需要在主线程,

    改变ViewPager的默认选中位置即可:viewPager.setCurrentItem(int);

     

           

    	//该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key
    	// 与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)

    public boolean isViewFromObject(View view, Object object) {

    return view == object;//这里是固定写法,一般不用变,写死了.

    }

    创建Pager的方法,相当于BaseAdapter的getView方法,很重要.(就是没有position类似的参数,所以没有优化)一般在该方法中要加载并返回View对象,并且要绑定数据,但是不需要复用Pager了,且返回container没有用.

    //注意:是参数为ViewGroup container(container代表了ViewPager控件自身)的instantiateItem方法第二个,不要弄错了

            public Object instantiateItem(ViewGroup container, int position) {

                //1.加载View

                ImageView imageView = new ImageView(MainActivity.this);

                imageView.setScaleType(ScaleType.FIT_XY);//设置所包裹的图片占满整个屏幕

                //2.绑定数据到View

                imageView.setImageResource(list.get(position).getIconId());

                //注意:必须要将控件对象添加到VIewPager中来

                container.addView(imageView);

                return imageView;

            }



    /**防止内存泄漏.相当于ListView的复用container

    * 销毁一个page,该方法的实际就是将instantiateItem返回的VIew对象从ViewPager中移除,

    container:还是ViewPager控件自身,object:则代表了View控件,使用时要强转成View一下

    补充:为什么参数是Object,而不直接是View,因为虽然99%是view,但也有可能是Fragment,所以用Object,提高了可扩展性.

    */

    public void destroyItem(ViewGroup container, int position, Object object) {

    //super.destroyItem(container, position, object);此方法一定要删掉.

    container.removeView((View) object);

    }

     

    6.为ViewPager设置页面切换监听器.并在onPageSelected里进行文本的设置(所有的 position : 条目的位置)

    viewPager.addOnPageChangeListener(new OnPageChangeListener() {//也可以是setOnPageChangeListener,二者是一样的,只不过set被淘汰了

    //Viewpager的页面pager切换完成时,执行该方法

    public void onPageSelected(int position) {

    Log.e("log","当页面改变时执行:onPageSelected");

        updateTitleAndDot()//记得在第4步,为ViewPager设置Adapter适配器下面,调用该方法,使ViewPager一创建,第一个页面就有文本数据

    }

     

    //ViewPager控件处于滑动中,执行该方法

    参数信息  positionOffset:页面移动距离的百分比例     positionOffsetPixels : 移动的偏移的像素

    注意:positionOffsetPixels,positionOffset:会随着页面向右滑动而不断增加(无限接近于1),但当完全滑动到另一页时,数据就变成了0.0

    public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {

    Log.d("log","当页面处于滑动中时执行:onPageScrolled");

    }

     

    //当ViewPager控件被点击或松开时(也可以理解为pager滑动状态改变时),执行该方法

    public void onPageScrollStateChanged(int state) {

    Log.i("log","当页面时执行:onPageScrollstateChanged");

    }

     }

    );

    展开全文
  • ViewPager 详解(一)---基本入门

    万次阅读 多人点赞 2014-08-09 09:48:01
    前言:这两天研究研究ViewPager滚动功能,现在很多的app都有用到这个功能,我们的大虾米也有这个模块。要研究就彻底的研究研究,我从不满足于一个功能只是简单的应用,要学就学的彻底,所以我打算将ViewPager 分几篇...

    前言:这两天研究研究ViewPager滚动功能,现在很多的app都有用到这个功能,我们的大虾米也有这个模块。要研究就彻底的研究研究,我从不满足于一个功能只是简单的应用,要学就学的彻底,所以我打算将ViewPager 分几篇写,研究的哪个程度就写到哪个程度吧。今天是第一篇,基本入门篇 。

     

     

    相关文章:

    1、《ViewPager 详解(一)---基本入门》

    2、《ViewPager 详解(二)---详解四大函数》

    3、《ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同》

    4、《ViewPager 详解(四)----自主实现滑动指示条》

    5、《ViewPager 详解(五)-----使用Fragment实现ViewPager滑动》

     

    首先让大家有个全局的认识,直接上个项目,看看仅仅通过这几行代码,竟然就能完成如此强悍的功能。下篇再结合API仔细讲讲为什么要这么写。

    效果图:

    实现了三个view间的相互滑动

                         第一个VIEW向第二个VIEW滑动       第二个VIEW向第三个VIEW滑动

       

    一、新建项目,引入ViewPager控件

    ViewPager。它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。

    1.在主布局文件里加入

     

     

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        tools:context="com.example.testviewpage_1.MainActivity" >
    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
    
    </RelativeLayout>

     

    其中 <android.support.v4.view.ViewPager /> 是ViewPager对应的组件,要将其放到想要滑动的位置

    2、新建三个layout,用于滑动切换的视图

    从效果图中也可以看到,我们的三个视图都非常简单,里面没有任何的控件,大家当然可以往里添加各种控件,但这里是个DEMO,只详解原理即可,所以我这里仅仅用背景来区别不用layout布局。

    布局代码分别如下:

    layout1.xml

     

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        android:orientation="vertical" >
        
    
    </LinearLayout>

    layout2.xml

     

     

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffff00"
        android:orientation="vertical" >
        
    
    </LinearLayout>
    

    layout3.xml

     

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ff00ff"
        android:orientation="vertical" >
        
    
    </LinearLayout>
    
    

     

    二、代码实战

    先上整体代码,然后逐步讲解。

    package com.example.testviewpage_1;
    /**
     * @author  harvic
     * @date 2014.8.9
     */
    import java.util.ArrayList;
    import java.util.List;
    import java.util.zip.Inflater;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    
    public class MainActivity extends Activity {
    
    	private View view1, view2, view3;
    	private ViewPager viewPager;  //对应的viewPager
    	
    	private List<View> viewList;//view数组
       
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            viewPager = (ViewPager) findViewById(R.id.viewpager);
            LayoutInflater inflater=getLayoutInflater();
            view1 = inflater.inflate(R.layout.layout1, null);
            view2 = inflater.inflate(R.layout.layout2,null);
            view3 = inflater.inflate(R.layout.layout3, null);
            
            viewList = new ArrayList<View>();// 将要分页显示的View装入数组中
    		viewList.add(view1);
    		viewList.add(view2);
    		viewList.add(view3);
    		
    		
    		PagerAdapter pagerAdapter = new PagerAdapter() {
    			
    			@Override
    			public boolean isViewFromObject(View arg0, Object arg1) {
    				// TODO Auto-generated method stub
    				return arg0 == arg1;
    			}
    			
    			@Override
    			public int getCount() {
    				// TODO Auto-generated method stub
    				return viewList.size();
    			}
    			
    			@Override
    			public void destroyItem(ViewGroup container, int position,
    					Object object) {
    				// TODO Auto-generated method stub
    				container.removeView(viewList.get(position));
    			}
    			
    			@Override
    			public Object instantiateItem(ViewGroup container, int position) {
    				// TODO Auto-generated method stub
    				container.addView(viewList.get(position));
    				
    				
    				return viewList.get(position);
    			}
    		};
    		
    		
    		viewPager.setAdapter(pagerAdapter);
    		
        }
    
    
    }

    代码量很小,全部放在了OnCreate()函数中。

     

    1、先看声明的变量的意义:

     

     

    private View view1, view2, view3;
    private List<View> viewList;//view数组
    private ViewPager viewPager;  //对应的viewPager

     

    首先viewPager对应 <android.support.v4.view.ViewPager/>控件。

    view1,view2 ,view3对应我们的三个layout,即layout1.xml,layout2.xml,layout3.xml

    viewList是一个View数组,盛装上面的三个VIEW

    2、接下来是他们的初始化过程:

     

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    LayoutInflater inflater=getLayoutInflater();
    view1 = inflater.inflate(R.layout.layout1, null);
    view2 = inflater.inflate(R.layout.layout2,null);
    view3 = inflater.inflate(R.layout.layout3, null);
    
    viewList = new ArrayList<View>();// 将要分页显示的View装入数组中
    viewList.add(view1);
    viewList.add(view2);
    viewList.add(view3);

    初始化过程难度不大,就是将资源与变量联系起来布局,最后将实例化的view1,view2,view3添加到viewList中

     

    3、PageAdapter——PageView的适配器

     

    适配器这个东东想必大家都不莫生,在ListView中也有适配器,listView通过重写GetView()函数来获取当前要加载的Item。而PageAdapter不太相同,毕竟PageAdapter是单个VIew的合集。

    PageAdapter 必须重写的四个函数:

     

    • boolean isViewFromObject(View arg0, Object arg1)
    • int getCount() 
    • void destroyItem(ViewGroup container, int position,Object object)
    • Object instantiateItem(ViewGroup container, int position)

     

    先看看各个函数,我们上面都做了什么吧:

     

    @Override
    public int getCount() {
    	// TODO Auto-generated method stub
    	return viewList.size();
    }

    getCount():返回要滑动的VIew的个数

     

     

    @Override
    public void destroyItem(ViewGroup container, int position,
    		Object object) {
    	// TODO Auto-generated method stub
    	container.removeView(viewList.get(position));
    }
    

    destroyItem():从当前container中删除指定位置(position)的View;

     

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
    	// TODO Auto-generated method stub
    		container.addView(viewList.get(position));
    		
    		
    		return viewList.get(position);
    	}
    };

    instantiateItem():做了两件事,第一:将当前视图添加到container中,第二:返回当前View

     

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
    	// TODO Auto-generated method stub
    	return arg0 == arg1;
    }

    isViewFromObject():对于这个函数就先不做讲解,大家目前先知道它要这样重写就行了,后面我们会对它进行改写。

     

    下一篇,我将仔细讲解这几个函数的意义,与有关Key的知识,当然最后也会有个例子给大家。这篇就到这了。

     

    源码地址:http://download.csdn.net/detail/harvic880925/7733249

     

    请大家尊重原创者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/38453725  万分感激!!!!!

    如果你喜欢我的文章,你可能更喜欢我的公众号

    启舰杂谈

     

    展开全文
  • ViewPager 详解(五)-----使用Fragment实现ViewPager滑动

    万次阅读 多人点赞 2014-08-18 15:03:51
    前言:前几篇文章讲解了ViewPager的普通实现方法,但android官方最推荐的一种实现方法却是使用fragment,下面我们使用fragment来重新实现一下第一篇《ViewPager 详解(一)---基本入门》所实现的效果。 系列文章...
  • Android ViewPager使用详解

    万次阅读 多人点赞 2012-11-10 21:34:06
    viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如何使用它呢,与LisstView类似,我们也需要一个适配器,他就是PagerAdapter。看一下api的图片, ViewPager的功能就是可以...
  • ViewPager 详解(二)---详解四大函数

    万次阅读 多人点赞 2014-08-11 09:29:26
    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合android...3、《ViewPager 详解(三)-...
  • ViewPager嵌套ViewPager

    千次阅读 2017-10-17 15:15:47
    两个ViewPager嵌套,实现无限循环即:A(1)-A2(B1)-A2(B2)-A(1) A:父ViewPager 有2个选项,B:为子ViewPager.同样有2个选项 A2即为B.
  • ViewPager 全面总结

    万次阅读 多人点赞 2018-03-01 11:41:14
    Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位于v4包中。低版本使用需要导入v4包,但是现在我们开发的APP一般不再兼容3.0及以下的系统版本,另外现在大多数使用Android ...
  • ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    万次阅读 多人点赞 2016-10-26 22:32:31
    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决这篇博客主要讲解一下几个问题 - 粗略地介绍一下View的事件分发机制 - 解决事件滑动冲突的思路及方法 - ScrollView 里面嵌套ViewPager导致的滑动冲突 - ...
  • viewpager嵌套viewpager

    2016-08-30 16:37:38
    1. MainActivty下4个Fragment组成第一个viewpager 2. 第一个Fragment下再次使用Viewpager,旗下集成2个子Fragment 3. 备注:ViewPager支持禁止滑动(项目可能需求) 3. ToolList 1. import android.support.v4....
  • ViewPager加载Activity

    千次下载 热门讨论 2012-10-26 18:16:41
    ViewPager滑动切换Activity,类似于新浪微博的消息模块
  • 这两天浏览安卓开发者官网的时候,发现google悄然推出了一个新的控件:ViewPager2 ,一看名称就知道这是一个和我们常用的 ViewPager 功能相似的控件,算是ViewPager的升级版吧。目前还只是推出了第一个预览版,我们...
  • 文章目录探索取代ViewPagerViewPager2前言ViewPager2 和 ViewPager 的区别ViewPager2 新增功能深入了解ViewPager2实现ViewPager2使用FragmentStateAdapter实现ViewPager2 持续更新中… 前言 早在2019年2月7日...
  • ViewPager嵌套ViewPager,内层ViewPager

    千次阅读 2018-04-30 15:37:11
    //第一页响应父类的左滑,最后一页响应父类的右滑public class RollViewPager extends ViewPager { public RollViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public....
  • ViewPager2是什么呢? ViewPager2 是 ViewPager 的下一代版本,带来了更强的功能并修复了之前的 bug;也就是解决了ViewPager的bug和不支持RTL布局等等其他问题,Google同时也放弃对ViewPager的维护了。 ViewPager2...
  • Android(ViewPager中的ViewPagerViewPager FragmentPagerAdapter嵌套子ViewPager FragmentPagerAdapter页面不能正常显示问题 Android的ViewPager如果只使用一“层” FragmentPagerAdapter构建ViewPager,那么将...
  • ViewPager2

    2020-05-31 20:31:34
    资料整理: ViewPager2:官方Viewpager升级版来临 使用总结: 使用注意事项:
  • ViewPager用法

    2015-11-30 09:28:38
    博客地址:http://blog.csdn.net/dmk877/article/details/50060745,ViewPager中PagerAdapter的用法详解
  • 该demo实现了android开发ScrollView嵌套ViewPager页面,解决嵌套滑动冲突以及Viewpager显示不同内容时,动态设置高度
  • 官方 Viewpager 升级版 - ViewPager2 实战

    万次阅读 多人点赞 2019-03-30 15:35:57
    Google 在 `androidx` 组件包里增加了一个新的组件 `ViewPager2`,目前已经更新了两个 alpha 版本了。那么,和之前的 `ViewPager` 组件相比,有什么改进呢?查看[官方文档]
  • 浏览安卓开发者官网的时候,发现google悄然推出了一个新的控件:ViewPager2 ,一看名称就知道这是一个和我们常用的 ViewPager 功能相似的控件,算是ViewPager的升级版吧。目前还只是推出了第一个预览版,我们可以...
  • ViewPager 套fragment 再套 ViewPager 套fragment,本例子是借鉴http://download.csdn.net/detail/u013682582/9462667此例子。解决重复加载fragment,使得切换时标题未选中的问题
  • 【重要:】为了避免广告Viewpager与TAB栏目的Viewpager的冲突,增加以下事件监听 1 viewpager_img.setOnTouchListener(new OnTouchListener() { 2 @Override 3 public boolean onTouch(View v, ...
  • 现在最头疼的事就是需求不明确,这不,有遇到你个奇葩需求,父viewPager总共有三个选项卡,第一个选项卡里嵌入一个子viewPager,这时候问题就来了,子viewPager无法滑动,我猜的事父viewPager把子viewPager拦截了,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,774
精华内容 14,309
关键字:

viewpager