10 使用ViewPager实现导航
10-1 认识ViewPager
ViewPager可以使视图左右引动
ViewPager的数据源相当于View或者Fragment对象的一个集合
VierPager就是一个容器,里面可以装View或者fragment两类东西
1.加入ViewPager
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
</android.support.v4.view.ViewPager>
android.support.v4.view.viewPager 为了解决兼容的问题。
android.support.v4是谷歌公司为了解决当前版本碎片化的问题,从而提供的一个兼容的包。可以实现向下兼容的问题,让一些高版本的控件能够在低版本中进行使用;
2.加载显示的页卡
将Layout布局转化为View对象
(1)LayoutInflater inflater=getLayoutInflater().from(this);
inflater.inflate(resource, root);
(2)View.inflate(context, resource, root);
3.配置适配器Adapter
(1)PagerAdapter 数据源:List<View>
(2)FragmentPagerAdapter: List<Fragment>
(3)FragmentStatePagerAdapter List<Fragment>
10-2 适配器PagerAdapter
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><android.support.v4.view.ViewPagerandroid:id="@+id/pager"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center" ></android.support.v4.view.ViewPager></LinearLayout>
view1.xml以及view2.xml view3.xml view4.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="第一个界面" /></LinearLayout>
MainActivity.java
package com.example.andriod2_viewpage;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.app.Activity; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.View;public class MainActivity extends Activity {private ViewPager pager;private List<View> viewList;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewList = new ArrayList<View>();/** 通过View对象去作为ViewPage的数据源*/View view1 = View.inflate(this, R.layout.view1, null);View view2 = View.inflate(this, R.layout.view2, null);View view3 = View.inflate(this, R.layout.view3, null);View view4 = View.inflate(this, R.layout.view4, null);viewList.add(view1);viewList.add(view2);viewList.add(view3);viewList.add(view4);// 初始化 ViewPagerpager = (ViewPager) findViewById(R.id.pager);// 创建PageAdapter的适配器MyPageAdapter adapter = new MyPageAdapter(viewList);// ViewAdapter加载适配器 pager.setAdapter(adapter);}}
MyPageAdapter.java
package com.example.andriod2_viewpage;import java.util.List;import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup;public class MyPageAdapter extends PagerAdapter {// 1.适配器的构造方法写出来private List<View> viewList;public MyPageAdapter(List<View> viewList){this.viewList = viewList;}/** 返回页卡的数量 等同于集合的大小*/@Overridepublic int getCount(){// TODO Auto-generated method stubreturn viewList.size();}/** View是否来之对象*/@Overridepublic boolean isViewFromObject(View arg0, Object arg1){// TODO Auto-generated method stubreturn arg0 == arg1;}/** 实例化页卡 position是当前的位置*/@Overridepublic Object instantiateItem(ViewGroup container, int position){// TODO Auto-generated method stub// 添加到ViewGroup来 container.addView(viewList.get(position));return viewList.get(position);}/** 销毁一个页卡 通过container移除一个View*/@Overridepublic void destroyItem(ViewGroup container, int position, Object object){// TODO Auto-generated method stub container.removeView(viewList.get(position));} }
结果显示:左右界面滑动
10-3 PagerTabStrip和PagerTitleStrip
加标题:
MainActivity.java
package com.example.andriod2_viewpage;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.app.Activity; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.View;public class MainActivity extends Activity {private ViewPager pager;private List<View> viewList;private List<String> titleList;private PagerTabStrip tabStrip;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewList = new ArrayList<View>();/** 通过View对象去作为ViewPage的数据源*/View view1 = View.inflate(this, R.layout.view1, null);View view2 = View.inflate(this, R.layout.view2, null);View view3 = View.inflate(this, R.layout.view3, null);View view4 = View.inflate(this, R.layout.view4, null);viewList.add(view1);viewList.add(view2);viewList.add(view3);viewList.add(view4);// 为ViewPager页卡设置标题titleList = new ArrayList<String>();titleList.add("第一页");titleList.add("第二页");titleList.add("第三页");titleList.add("第四页");// 初始化 ViewPagerpager = (ViewPager) findViewById(R.id.pager);// 创建PageAdapter的适配器MyPageAdapter adapter = new MyPageAdapter(viewList, titleList);// ViewAdapter加载适配器 pager.setAdapter(adapter);}}
MyPageAdapter.java
package com.example.andriod2_viewpage;import java.util.List;import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup;public class MyPageAdapter extends PagerAdapter {// 1.适配器的构造方法写出来private List<View> viewList;private List<String> titleList;public MyPageAdapter(List<View> viewList, List<String> titleList){this.viewList = viewList;this.titleList = titleList;}/** 返回页卡的数量 等同于集合的大小*/@Overridepublic int getCount(){// TODO Auto-generated method stubreturn viewList.size();}/** View是否来之对象*/@Overridepublic boolean isViewFromObject(View arg0, Object arg1){// TODO Auto-generated method stubreturn arg0 == arg1;}/** 实例化页卡 position是当前的位置*/@Overridepublic Object instantiateItem(ViewGroup container, int position){// TODO Auto-generated method stub// 添加到ViewGroup来 container.addView(viewList.get(position));return viewList.get(position);}/** 销毁一个页卡 通过container移除一个View*/@Overridepublic void destroyItem(ViewGroup container, int position, Object object){// TODO Auto-generated method stub container.removeView(viewList.get(position));}/*** 设置ViewPager页卡的标题*/@Overridepublic CharSequence getPageTitle(int position){// TODO Auto-generated method stubreturn titleList.get(position);} }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><android.support.v4.view.ViewPagerandroid:id="@+id/pager"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center" > <android.support.v4.view.PagerTabStripandroid:id="@+id/tab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="top" ></android.support.v4.view.PagerTabStrip></android.support.v4.view.ViewPager></LinearLayout>
为PagerTabStrip设置属性
MainActivity.java
package com.example.andriod2_viewpage;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.View;public class MainActivity extends Activity {private ViewPager pager;private List<View> viewList;private List<String> titleList;private PagerTabStrip tabStrip;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewList = new ArrayList<View>();/** 通过View对象去作为ViewPage的数据源*/View view1 = View.inflate(this, R.layout.view1, null);View view2 = View.inflate(this, R.layout.view2, null);View view3 = View.inflate(this, R.layout.view3, null);View view4 = View.inflate(this, R.layout.view4, null);viewList.add(view1);viewList.add(view2);viewList.add(view3);viewList.add(view4);// 为ViewPager页卡设置标题titleList = new ArrayList<String>();titleList.add("第一页");titleList.add("第二页");titleList.add("第三页");titleList.add("第四页");// 为PagerTabStrip设置属性tabStrip = (PagerTabStrip) findViewById(R.id.tab);tabStrip.setBackgroundColor(Color.YELLOW);tabStrip.setTextColor(Color.RED);// 最长的横线不要tabStrip.setDrawFullUnderline(false);// 小粗线的颜色 tabStrip.setTabIndicatorColor(Color.GREEN);// 初始化 ViewPagerpager = (ViewPager) findViewById(R.id.pager);// 创建PageAdapter的适配器MyPageAdapter adapter = new MyPageAdapter(viewList, titleList);// ViewAdapter加载适配器 pager.setAdapter(adapter);}}
-----------------------------------------------------------------------------------------------------
注意:PagerTitleStrip:当有PagerTitleStrip,则PagerTabStrip失效
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><android.support.v4.view.ViewPagerandroid:id="@+id/pager"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center" ><android.support.v4.view.PagerTabStripandroid:id="@+id/tab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="top" ></android.support.v4.view.PagerTabStrip> <android.support.v4.view.PagerTitleStripandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom" ></android.support.v4.view.PagerTitleStrip></android.support.v4.view.ViewPager></LinearLayout>
具体步骤:
1 在MainActivity中创建一个对象private PagerTabStrip tab;
2 在main.xml的v4.view.ViewPager中嵌套多一个v4.view.PagerTabStrip
3 在MainActivity中为ViewPager页卡设置标题
private List<String>titleList; //声明
titleList=new ArrayList<String>(); //实例化
titleList.add("第一页");//添加 有好几条
4 把titleList传到构造方法MyPagerAdapter 并且写好
5 MyPagerAdapter中加载getPageTitle方法 来设置ViewPager页卡的标题
要实现这个方法 必须要在布局文件中加载了PagerTabStrip货PagerTitleStrip
6 为PagerTabStrip设置一些属性
7 PagerTitleStrip出现 PagerTabStrip会失效
10-4 适配器FragmentPagerAdapter
MainActivity.java
package com.example.andriod2_viewpage;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.View;public class MainActivity extends FragmentActivity {private ViewPager pager;private List<View> viewList;private List<String> titleList;private List<Fragment> fragList;private PagerTabStrip tabStrip;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewList = new ArrayList<View>();/** 通过View对象去作为ViewPage的数据源*/View view1 = View.inflate(this, R.layout.view1, null);View view2 = View.inflate(this, R.layout.view2, null);View view3 = View.inflate(this, R.layout.view3, null);View view4 = View.inflate(this, R.layout.view4, null);/** 通过Fragment作为ViewPager的数据源*/fragList = new ArrayList<Fragment>();fragList.add(new Fragment1());fragList.add(new Fragment2());fragList.add(new Fragment3());fragList.add(new Fragment4());viewList.add(view1);viewList.add(view2);viewList.add(view3);viewList.add(view4);// 为ViewPager页卡设置标题titleList = new ArrayList<String>();titleList.add("第一页");titleList.add("第二页");titleList.add("第三页");titleList.add("第四页");// 为PagerTabStrip设置属性tabStrip = (PagerTabStrip) findViewById(R.id.tab);tabStrip.setBackgroundColor(Color.YELLOW);tabStrip.setTextColor(Color.RED);// 最长的横线不要tabStrip.setDrawFullUnderline(false);// 小粗线的颜色 tabStrip.setTabIndicatorColor(Color.GREEN);// 初始化 ViewPagerpager = (ViewPager) findViewById(R.id.pager);// 创建PageAdapter的适配器MyPageAdapter adapter = new MyPageAdapter(viewList, titleList);// ViewAdapter加载适配器// pager.setAdapter(adapter); MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragList, titleList);pager.setAdapter(fragmentPagerAdapter);}}
MyFragmentPagerAdapter.java
package com.example.andriod2_viewpage;import java.util.List;import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter;public class MyFragmentPagerAdapter extends FragmentPagerAdapter {private List<Fragment> fragList;// 数据源的集合private List<String> titleList;// 标题// 构造函数public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> fragList,List<String> titleList){super(fm);// TODO Auto-generated constructor stubthis.fragList = fragList;this.titleList = titleList;}@Overridepublic Fragment getItem(int arg0){// TODO Auto-generated method stubreturn fragList.get(arg0);}@Overridepublic int getCount(){// TODO Auto-generated method stubreturn fragList.size();}/*** 标题信息的返回*/@Overridepublic CharSequence getPageTitle(int position){// TODO Auto-generated method stubreturn titleList.get(position);}}
效果和使用PageAdapter是一样的,只不过它没有销毁过程。
验证它没有销毁过程:
Fragment1、2、3.java
package com.example.android_viewpager;import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;public class Fragment3 extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubreturn inflater.inflate(R.layout.view3, container, false);} }
Fragment4.java
package com.example.andriod2_viewpage;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 android.widget.Toast;public class Fragment4 extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){// TODO Auto-generated method stubreturn inflater.inflate(R.layout.view4,container,false);}@Overridepublic void onDestroy(){// TODO Auto-generated method stubsuper.onDestroy();Log.i("t", "我被销毁了");} }
在LogCat没有显示。
-------------------------------------------------------------------------
MainActivity.java
package com.example.andriod2_viewpage;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.View;public class MainActivity extends FragmentActivity {private ViewPager pager;private List<View> viewList;private List<String> titleList;private List<Fragment> fragList;private PagerTabStrip tabStrip;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewList = new ArrayList<View>();/** 通过View对象去作为ViewPage的数据源*/View view1 = View.inflate(this, R.layout.view1, null);View view2 = View.inflate(this, R.layout.view2, null);View view3 = View.inflate(this, R.layout.view3, null);View view4 = View.inflate(this, R.layout.view4, null);/** 通过Fragment作为ViewPager的数据源*/fragList = new ArrayList<Fragment>();fragList.add(new Fragment1());fragList.add(new Fragment2());fragList.add(new Fragment3());fragList.add(new Fragment4());viewList.add(view1);viewList.add(view2);viewList.add(view3);viewList.add(view4);// 为ViewPager页卡设置标题titleList = new ArrayList<String>();titleList.add("第一页");titleList.add("第二页");titleList.add("第三页");titleList.add("第四页");// 为PagerTabStrip设置属性tabStrip = (PagerTabStrip) findViewById(R.id.tab);tabStrip.setBackgroundColor(Color.YELLOW);tabStrip.setTextColor(Color.RED);// 最长的横线不要tabStrip.setDrawFullUnderline(false);// 小粗线的颜色 tabStrip.setTabIndicatorColor(Color.GREEN);// 初始化 ViewPagerpager = (ViewPager) findViewById(R.id.pager);// 创建PageAdapter的适配器MyPageAdapter adapter = new MyPageAdapter(viewList, titleList);// ViewAdapter加载适配器// pager.setAdapter(adapter); MyFragmentPagerAdapter adapter2 = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragList, titleList); // pager.setAdapter(adapter2); MyFragmentPagerAdapter2 adapter3 = new MyFragmentPagerAdapter2(getSupportFragmentManager(), fragList, titleList);pager.setAdapter(adapter3);}}
MyFragmentPagerAdapter2.java
package com.example.android_viewpager;import java.util.List;import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentStatePagerAdapter; import android.view.ViewGroup;public class MyFragmentPagerAdapter2 extends FragmentStatePagerAdapter{private List<Fragment>fragList;private List<String>titleList;public MyFragmentPagerAdapter2(FragmentManager fm,List<Fragment> fragList,List<String>titleList) {super(fm);// TODO Auto-generated constructor stubthis.fragList=fragList;this.titleList=titleList;}@Overridepublic Fragment getItem(int arg0) {// TODO Auto-generated method stubreturn fragList.get(arg0);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn fragList.size();}@Overridepublic CharSequence getPageTitle(int position) {// TODO Auto-generated method stubreturn titleList.get(position);}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// TODO Auto-generated method stubsuper.destroyItem(container, position, object);}@Overridepublic Object instantiateItem(ViewGroup arg0, int arg1) {// TODO Auto-generated method stubreturn super.instantiateItem(arg0, arg1);}}
步骤:
1 建立一个Fragment1继承Fragment
2 Fragment1中建立初始化界面的方法onCreateView
3 复制出4个Fragment2,3,4 并修改好布局文件
4 声明Fragment //private List<Fragment>fragList;
5 通过Fragment作为ViewPager的数据源
初始化 //fragList=new ArrayList<Fragment>();
添加 //fragList.add(new Fragment1());
6 配置数据适配器
新建一个类MyFragmentPagerAdapter 继承FragmentPagerAdapter 并实习一些必要的方法
7 使用getPageTitle方法实现标题信息返回
8 在MainActivity加载适配器
初始化MyFragmentPagerAdapter
Vocation加载适配器 //pager.setAdapter(adapter2);
9 MyFragmentPager中返回值设置好
10 为添加页卡的维护和销毁 在MainActivity中设置好新方法 再加载新的适配器
----------------------
总结:
ViewPager
使用fragment作为数据源:
注意凡是涉及到FragmentPagerAdapter的文件都应该导入android.support.v4.app.Fragment包,兼容性更好
1.创建多个Fragment类继承Fragment加载相应的布局文件,注意导入android.support.v4.app.Fragment;
2.在ViewPager容器创建集合List<Fragment>fragList=new ArrayList<Fragment>();并添加到fragList当中
3.配置适配器继承FragmentPagerAdapter
4.适配器类的构造函数需要手动增加参数,FragmentPagerAdapter无法实现自动实例化和销毁的Fragment
5.实例化适配器:主函数应该继承FragmentActivity,兼容性更好,第一个构造函数传递的参数为getSupportFragmentManager()
6.加载适配器,
7.运行出现问题,注意看适配器中的方法是否重写了
8.FragmentStatePagerAdapter具有自动销毁与实例化页卡的功能
FragmentPagerAdater为适配器加载ViewPager
1. Activity布局文件中添加android.support.v4.view.ViewPager
2. 初始化数据源
(1)List<Fragment>数据源
fragList = new ArrayList<Fragment>();
fragList.add(new Fragment1());
fragList.add(new Fragment2());
(2)初始化Tab title数据源
titleList = new ArrayList<String>();
titleList.add("FirstFrag");
titleList.add("SecondFrag");
3. 新建一个FragmentPagerAdapter适配器,并重写构造函数和其他的函数
public MyFragemntPagerAdapter(FragmentManager fm, List<Fragment> fragList, List<String> titleList) {
super(fm);
this.fragList = fragList;
this.titleList = titleList;
}
4. 在Activity中创建适配器,构造函数中将fragList、titleList都传递进去
MyFragemntPagerAdapter adapter = new MyFragemntPagerAdapter(getSupportFragmentManager(), fragList, titleList);
5. 加载适配器
viewPager.setAdapter(adapter);
6. 注意
(1)需要新建几个Fragment类来将Layout布局转换成View对象。最后再由List<Fragment>添加进来。
(2)在FragmentPagerAdapter中,所有的页卡是一次创建的,并不会销毁
(3)FragmentStatePagerAdapter,用法和FragmentPagerAdapter一样,只是需要添加
instantiateItem(),destroyItem(),且不需要改
(4)FragmentStatePagerAdapter的区别在于页卡是每次创建3个
由于FragmentPagerAdapter是将页卡一次性全部加载进来,所以这个适配器的使用就有局限性,当我们的页卡比较少的时候我们就用它,它的另一个替代FragmentStatePagerAdapter,就可以像PagerAdapter那样一次只加载部分的页卡。
自定义适配器继承FragmentPagerAdapter:适配fragment列表。
自定义适配器继承FragmentStatePagerAdapter:需要重写创建和销毁的方法
FragmentPagerAdapter没有动态添加和销毁Fragment的功能
10-5 监听器的使用
OnPageChangeListener()——用来监控ViiewPager滑动到第几页
MainActivity.java
package com.example.andriod2_viewpage;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Menu; import android.view.View; import android.widget.Toast;public class MainActivity extends FragmentActivity implementsOnPageChangeListener {private ViewPager pager;private List<View> viewList;private List<String> titleList;private List<Fragment> fragList;private PagerTabStrip tabStrip;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewList = new ArrayList<View>();/** 通过View对象去作为ViewPage的数据源*/View view1 = View.inflate(this, R.layout.view1, null);View view2 = View.inflate(this, R.layout.view2, null);View view3 = View.inflate(this, R.layout.view3, null);View view4 = View.inflate(this, R.layout.view4, null);/** 通过Fragment作为ViewPager的数据源*/fragList = new ArrayList<Fragment>();fragList.add(new Fragment1());fragList.add(new Fragment2());fragList.add(new Fragment3());fragList.add(new Fragment4());viewList.add(view1);viewList.add(view2);viewList.add(view3);viewList.add(view4);// 为ViewPager页卡设置标题titleList = new ArrayList<String>();titleList.add("第一页");titleList.add("第二页");titleList.add("第三页");titleList.add("第四页");// 为PagerTabStrip设置属性tabStrip = (PagerTabStrip) findViewById(R.id.tab);tabStrip.setBackgroundColor(Color.YELLOW);tabStrip.setTextColor(Color.RED);// 最长的横线不要tabStrip.setDrawFullUnderline(false);// 小粗线的颜色 tabStrip.setTabIndicatorColor(Color.GREEN);// 初始化 ViewPagerpager = (ViewPager) findViewById(R.id.pager);// 创建PageAdapter的适配器MyPageAdapter adapter = new MyPageAdapter(viewList, titleList);// ViewAdapter加载适配器// pager.setAdapter(adapter); MyFragmentPagerAdapter adapter2 = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragList, titleList);// pager.setAdapter(adapter2); MyFragmentPagerAdapter2 adapter3 = new MyFragmentPagerAdapter2(getSupportFragmentManager(), fragList, titleList);pager.setAdapter(adapter3);pager.setOnPageChangeListener(this);}@Overridepublic void onPageScrollStateChanged(int arg0){// TODO Auto-generated method stub }@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2){// TODO Auto-generated method stub } @Overridepublic void onPageSelected(int arg0){// TODO Auto-generated method stub// (arg0+1)从0开始计算的Toast.makeText(this, "这是第" + (arg0 + 1) + "个界面", Toast.LENGTH_SHORT).show();}}
切换页卡的监听器:
1.OnPageChangListener,其中最常用的函数是onPageSelected(int arg0);
2.Fragment生命周期比较全,以fragment为资源的ViewPager比较好控制,适用于逻辑比较复杂的情况,如果只是为了展示则推荐以view为资源的viewPager
转载于:https://www.cnblogs.com/crazyzx/articles/5323776.html
10 使用ViewPager实现导航相关推荐
- Viewpager + 小点点导航的具体实现
Viewpager + 小点点导航的具体实现 Viewpager来实现广告展示效果肯定是不错的,配上小点点的分页导航肯定是标配,那么现在就来说一说具体是怎么样来实现的呢? 我们先看看效果图: 写完成之 ...
- android viewpager标题,ViewPager顶部导航栏联动效果(标题栏条目多)
如果标题栏过多,超过屏幕的宽度,该怎么弄,下面我们就来解决一下,效果如下: 其实和之前写的也差不多,我就是在哪个demo里面添加和修改了一下,就加了几个title标题,加了几个图片,最重要的是给Tab ...
- Android 使用ViewPager实现导航页面
PagerAdapter类 /*** 作者:created by meixi* 邮箱:13164716840@163.com* 日期:2018/7/23 17*/public class GuideP ...
- SEO流量增长10倍:筛选导航优化
什么是筛选导航,个人非官方是这样定义的,通过触发不同的筛选条件来组成不同的页面. 本人接触过的教育培训和医疗健康类型的网站中是流量获取不可缺的一个重要组成部分. 筛选导航一般蕴含着大量的页面,显而易见 ...
- android 按钮手势,如何在Android 10中使用手势导航或如何关闭它
谷歌移动操作系统的最新版本Android 10带有许多出色的新功能.在Android 9.0 Pie中向Android中引入了手势导航 - 它使用滑动和其他操作来控制手机,而不是点击按钮.在Andro ...
- android viewpager button 导航,ViewPager做底部导航
做了一个项目,需要使用底部导航功能,仿微信效果,可以左右滑动切换页面.好处就是比较适合用户手势操作,操作效果比较好:缺点是viewpager控件需要提前加载下一个页面,最少提前加载一个页面,为了保证左 ...
- ViewPager实现导航效果简单应用1
1 添加依赖 implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02' 创建项目的时候请勾选Use androidX 不然库冲突 2 ...
- 背水一战 Windows 10 (41) - 控件(导航类): Frame
原文:背水一战 Windows 10 (41) - 控件(导航类): Frame [源码下载] 背水一战 Windows 10 (41) - 控件(导航类): Frame 作者:webabcd 介绍 ...
- 安卓开发 底部导航图标切换时动画效果_体验安卓 10:好用百倍都不止!
十万人测评俱乐部 Q群:737976088 资源置换合作请加VX:15216685489 谷歌正式发布了 Android 10,这是安卓的第十个大版本更新. 雷科技(微信:leitech)在第一时间将 ...
- 游戏引擎剖析 (10) 人工智能和导航(路径发现)
第 10 部分 人工智能和导航(路径发现) 人工智能(AI) 我们上面已经用了其他九个章节介绍了游戏引擎,现在让我们深入到非常有趣和重要的人工智能主题.人工智能如今正在变成被谈论得最多的仅次于游戏引擎 ...
最新文章
- 在ATS 5.3.0上开启stats_over_http插件
- Spark Streaming高级特性在NDCG计算实践
- 毕业论文 | 便携式环境烟雾监测器(源码、电路图)
- 《JavaScript高级程序设计》阅读笔记(三):ECMAScript中的引用类型
- ORA-06413连接未打开的错误的原因和解决方法
- Java用POI导出Excel表格中的数据
- 【SpringBoot深入浅出系列】SpringBoot之集成JUnit5进行单元测试
- mysql字典_mysql常用字典表(完整版)
- Flutter 开发之 Dart语言 基础
- win10禁用笔记本键盘
- 加来道雄 基因编辑 纳米机器人_同样基因编辑技术,为什么2位学者获得诺奖,中国贺建奎被痛骂?!...
- JavaWeb - 工作窃取算法 Work-Stealing
- 一篇文章带您秒懂地理标志商标注册
- 最优化学习 拟牛顿法(Quasi-Newton Method)
- 数据抓取软件是如何抓取数据的?
- 解决 configure.ac: error: possibly undefined macro: AC_PROG_LIBTOOL
- 动态模糊神经网络用于自学习
- 安装ecshop php,PHPstudy和ecshop的安装和使用
- 所见即所得的html制作,做一个所见即所得的CSS效果
- JAVA常见基础问题
热门文章
- 2014北京邀请赛 F Football on Table
- c++ poco 使用mysql中文乱码问题
- 结构体类型指针做函数参数(C++)
- 应用程序虚拟化,序列化实验 Microsoft Desktop Optimization Pack 实现一个应用程
- 马斯克再次创造历史!三位太空游客坐五手火箭成功升空,今晚达到空间站,票价3.5亿...
- 知乎高赞:为什么许多原本的 Java 项目都试图用 go 进行重写开源?
- 2020年4月编程语言排行榜:少儿编程真有这么火吗?
- 二货同事!写上千行的类!这样的代码让我生不如死!
- Spring Boot ES 实战,直接拿来用!
- 3分钟看懂 Linux 磁盘划分