精华内容
下载资源
问答
  • 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 详解(一)---基本入门》所实现的效果。 系列文章...

    前言:前几篇文章讲解了ViewPager的普通实现方法,但android官方最推荐的一种实现方法却是使用fragment,下面我们使用fragment来重新实现一下第一篇《ViewPager 详解(一)---基本入门》所实现的效果。

     

    系列文章:

     

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

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

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

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

    其它相关文章:

    5、《Android Fragment完全解析,关于碎片你所需知道的一切》

    6、《fragment中嵌套viewpager,vierpager中有多个fragment》

     

    本篇效果图:

    在第一个页面加一个Btn                                          第一页面向第二页面滑动

      

             第二页面向第三个页面滑动

    一、概述

    从前面几篇文章,我们知道,实现ViewPager是要有适配器的,我们前面用的适配器是PagerAdapter,而对于fragment,它所使用的适配器是:FragmentPagerAdapter.先看看官方对于这个类的解释:(英文下面有中文解释)

    原文:

     

    Class Overview


     

    Implementation of PagerAdapter that represents each page as a Fragment that is persistently kept in the fragment manager as long as the user can return to the page.

    This version of the pager is best for use when there are a handful of typically more static fragments to be paged through, such as a set of tabs. The fragment of each page the user visits will be kept in memory, though its view hierarchy may be destroyed when not visible. This can result in using a significant amount of memory since fragment instances can hold on to an arbitrary amount of state. For larger sets of pages, consider FragmentStatePagerAdapter.

    When using FragmentPagerAdapter the host ViewPager must have a valid ID set.

    Subclasses only need to implement getItem(int) and getCount() to have a working adapter.

    译文:(译的不好,大家可在评论中补充)

    FragmentPagerAdapter派生自PagerAdapter,它是用来呈现Fragment页面的,这些Fragment页面会一直保存在fragment manager中,以便用户可以随时取用。

    这个适配器最好用于有限个静态fragment页面的管理。尽管不可见的视图有时会被销毁,但用户所有访问过的fragment都会被保存在内存中。因此fragment实例会保存大量的各种状态,这就造成了很大的内存开销。所以如果要处理大量的页面切换,建议使用FragmentStatePagerAdapter.

    每一个使用FragmentPagerAdapter的ViewPager都要有一个有效的ID集合,有效ID的集合就是Fragment的集合(感谢夫诸同学的提示)

    对于FragmentPagerAdapter的派生类,只需要重写getItem(int)和getCount()就可以了。

    二、具体实现

     

    1、适配器实现——FragmentPagerAdapter

    先看完整代码,再细讲:

     

    public class FragAdapter extends FragmentPagerAdapter {
    
    	private List<Fragment> mFragments;
    	
    	public FragAdapter(FragmentManager fm,List<Fragment> fragments) {
    		super(fm);
    		// TODO Auto-generated constructor stub
    		mFragments=fragments;
    	}
    
    	@Override
    	public Fragment getItem(int arg0) {
    		// TODO Auto-generated method stub
    		return mFragments.get(arg0);
    	}
    
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return mFragments.size();
    	}
    
    }

    这里有三个函数,根据第一部分的官方文档,可知,对于FragmentPagerAdapter的派生类,只重写getItem(int)和getCount()就可以了。

     

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

     

    public FragAdapter(FragmentManager fm,List<Fragment> fragments) {
    	super(fm);
    	// TODO Auto-generated constructor stub
    	mFragments=fragments;
    }

    然后在getItem(int arg0)中,根据传来的参数arg0,来返回当前要显示的fragment,下面是getItem的官方解释,难度不大,不再细讲。

     

    public abstract Fragment getItem (int position)

    Return the Fragment associated with a specified position.

    最后,getCount()返回用于滑动的fragment总数;

    从构造函数所以看出,我们要构造Fragment的集合才行,所以下面我们就先产生我们所需要的Fragment类;

     

    2、三个Fragment类

    第一个Fragment类:

    XML:(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" >
        
        <Button android:id="@+id/fragment1_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="show toast"
            />
    </LinearLayout>

    在其中加入了一个Btn

     

     

     

     

     

    Java代码:

     

    public class Fragment1 extends Fragment {
    	
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		View view= inflater.inflate(R.layout.layout1, container, false);
    		
    		//对View中控件的操作方法
    		Button btn = (Button)view.findViewById(R.id.fragment1_btn);
    		btn.setOnClickListener(new View.OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				Toast.makeText(getActivity(), "点击了第一个fragment的BTN", Toast.LENGTH_SHORT).show();
    			}
    		});
    		return view;
    	}
    }

    在onCreateView()中返回要显示的View,上面这段代码简单演示了如何对视图里的控件进行操作,难度不大,不再细讲,如果对Fragment不太熟悉的同学,先看看这篇文章:《Android Fragment完全解析,关于碎片你所需知道的一切》

     

     

     

     

     

    第二个Fragment类:

    XML代码:(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>

    java代码:

     

    public class Fragment2 extends Fragment {
    	
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		View view=inflater.inflate(R.layout.layout2, container, false);
    		return view;
    	}
    
    }


    第三个Fragment类:

     

    XML代码:(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>

    java代码:

     

    public class Fragment3 extends Fragment {
    	
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		View view=inflater.inflate(R.layout.layout3, container, false);
    		return view;
    	}
    
    }

    3、主activity实现

    核心代码:

     

     

    public class MainActivity extends FragmentActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //构造适配器
            List<Fragment> fragments=new ArrayList<Fragment>();
            fragments.add(new Fragment1());
            fragments.add(new Fragment2());
            fragments.add(new Fragment3()); 
            FragAdapter adapter = new FragAdapter(getSupportFragmentManager(), fragments);
            
            //设定适配器
            ViewPager vp = (ViewPager)findViewById(R.id.viewpager);
            vp.setAdapter(adapter);
        }
    
    }

     

    首先有一个最值得注意的地方:Activity派生自FragmentActivity,其实这是有关Fragment的基础知识,只有FragmentActivity才能内嵌fragment页面,普通Activity是不行的。

    这段代码主要分为两步,第一步:构造适配器;第二步:设定适配器。

    先看构造适配器的过程:

    //构造适配器
    List<Fragment> fragments=new ArrayList<Fragment>();
    fragments.add(new Fragment1());
    fragments.add(new Fragment2());
    fragments.add(new Fragment3()); 
    FragAdapter adapter = new FragAdapter(getSupportFragmentManager(), fragments);

    构造一个fragment列表,然后将上面的三个Fragment类对应的实例添加进去,最后生成FragAdapter实例。
    至于第二步,设定适配器,没什么好讲的。

     

     

    4、可能出现的问题

    问题:在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》

     

    源码下载地址:http://download.csdn.net/detail/harvic880925/7777849

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

     

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

    启舰杂谈

    展开全文
  • 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 全面总结

    万次阅读 多人点赞 2018-03-01 11:41:14
    Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位于v4包中。低版本使用需要导入v4包,但是现在我们开发的APP一般不再兼容3.0及以下的系统版本,另外现在大多数使用Android ...
  • 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,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,类似于新浪微博的消息模块
  • 文章目录探索取代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` 组件相比,有什么改进呢?查看[官方文档]
  • 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拦截了,...
  • 竖向滑动viewpager和横向滑动viewpager混用
  • viewpager嵌套viewpager如何让父viewpager禁止左右滑动,子viewpager正常滑动
  • scrollview嵌套viewpager (左右滑动的) viewpager自适应高度失效了。。。怎么解决scrollview里面viewpager的高度自适应问题
  • 项目中用到动态高度的ViewPager,为了加强记忆,自己也仿着写个效果来 原理: ViewPager默认是每个页面相同高度的,我们要改变其页面的高度,自然就要在其显示某个页面的时候调用其(ViewPager)的onMeasure方法。...

空空如也

空空如也

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

viewpager