<android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:foregroundGravity="center" > </android.support.v4.view.ViewPager>
将Layout布局转换为View对象java
1. LayoutInflater if = getLayoutInflater().from(this); if.inflate(resource, root); 2. View.inflate(context, resource, root);
View view1 = View.inflate(this, R.layout.view1, null);
package com.example.demo12; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by WANG on 2016/9/30 0030. */ public class MyPagerAdapter extends PagerAdapter { private List<View> viewList; public MyPagerAdapter(List<View> viewList) { this.viewList = viewList; } /** * 返回的是页卡的数量 * @return */ @Override public int getCount() { return viewList.size(); } /** * View是否来自对象 * @param view * @param object * @return */ @Override public boolean isViewFromObject(View view, Object object) { return view == object; } /** * 实例化一个页卡 * @param container * @param position * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position); } /** * 销毁一个页卡 * @param container * @param position * @param object */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position)); } }
因为FragmentPagerAdapter是一次加载全部的Fragment,不能销毁Fragment,因此当须要加载的Fragment比较少时,可使用FragmentPagerAdapter。android
package com.example.demo12; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import java.util.List; /** * Created by WANG on 2016/9/30 0030. */ public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; private List<String> titleList; public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList) { super(fm); this.fragmentList = fragmentList; this.titleList = titleList; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } }
FragmentStatePagerAdapter 能够自动维护Fragment的建立与销毁。app
package com.example.demo12; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.view.ViewGroup; import java.util.List; /** * Created by WANG on 2016/9/30 0030. */ public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter { private List<Fragment> fragmentList; private List<String> titleList; public MyFragmentStatePagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList) { super(fm); this.fragmentList = fragmentList; this.titleList = titleList; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } //建立 @Override public Object instantiateItem(ViewGroup container, int position) { return super.instantiateItem(container, position); } //销毁 @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); } }
getCount() //须要返回全部页面的数量 isViewFromObject(View arg0, Object arg1) //判断试图是否由对象产生 instantiateItem(ViewGroup container, int position) //实例化界面 destroyItem(ViewGroup container, int position, Object object) //销毁页面 getPageTitle(int position) //返回页面标题信息
1)在ViewPager中加入PagerTabStripide
<android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:foregroundGravity="center" > <android.support.v4.view.PagerTabStrip android:id="@+id/tab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:foregroundGravity="top" > </android.support.v4.view.PagerTabStrip> </android.support.v4.view.ViewPager>
2)添加标题并进行一些设置布局
//为页卡设置标题 titleList = new ArrayList<String>(); titleList.add("第一页"); titleList.add("第二页"); titleList.add("第三页"); titleList.add("第四页"); /** * 为PagerTabStrip设置一些属性 */ tab = (PagerTabStrip) findViewById(R.id.tab); tab.setBackgroundColor(Color.CYAN); //背景颜色 tab.setTextColor(Color.BLACK); //文字颜色 tab.setDrawFullUnderline(false); //tab的底线,不显示 tab.setTabIndicatorColor(Color.BLUE); //当前选中的tab的底线的颜色
3)在适配器中添加设置this
/** * 设置ViewPager的标题 * @param position * @return */ @Override public CharSequence getPageTitle(int position) { return titileList.get(position); }
效果以下:spa
<android.support.v4.view.PagerTitleStrip android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:foregroundGravity="top" > </android.support.v4.view.PagerTitleStrip>
PagerTitleStrip与PagerTabStrip类似,通常使用时选择其中一个。code
添加监听xml
实现OnPageChangeListener接口,实现onPageSelected方法:对象
@Override public void onPageSelected(int position) { Toast.makeText(this, "当前是第" + (position+1) + "界面", Toast.LENGTH_SHORT).show(); }
效果以下:
实例:
//MainActivity.java package com.example.demo12; import android.graphics.Color; import android.support.v4.app.Fragment; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{ private List<View> viewList; private ViewPager viewPager; private PagerTabStrip tab; private List<String> titleList; private List<Fragment> fragmentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewList = new ArrayList<View>(); /** * 经过View对象去做为ViewPager的数据源 */ 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); /** * 经过Fragment做为ViewPager的数据源 */ fragmentList = new ArrayList<Fragment>(); fragmentList.add(new Fragment1()); fragmentList.add(new Fragment2()); fragmentList.add(new Fragment3()); fragmentList.add(new Fragment4()); //为页卡设置标题 titleList = new ArrayList<String>(); titleList.add("第一页"); titleList.add("第二页"); titleList.add("第三页"); titleList.add("第四页"); /** * 为PagerTabStrip设置一些属性 */ tab = (PagerTabStrip) findViewById(R.id.tab); tab.setBackgroundColor(Color.CYAN); //背景颜色 tab.setTextColor(Color.BLACK); //文字颜色 tab.setDrawFullUnderline(false); //tab的底线,不显示 tab.setTabIndicatorColor(Color.BLUE); //当前选中的tab的底线的颜色 //初始化ViewPager viewPager = (ViewPager) findViewById(R.id.pager); /** * PagerAdapter */ //建立PagerAdapter的适配器 MyPagerAdapter adapter = new MyPagerAdapter(viewList, titleList); //ViewPager加载适配器 //viewPager.setAdapter(adapter); /** * FragmentPagerAdapter */ //建立FragmentPagerAdapter的适配器 MyFragmentPagerAdapter adapter1 = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList, titleList); //ViewPager加载适配器 viewPager.setAdapter(adapter1); viewPager.setOnPageChangeListener(this); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { Toast.makeText(this, "当前是第" + (position+1) + "界面", Toast.LENGTH_SHORT).show(); } @Override public void onPageScrollStateChanged(int state) { } }
<!--view1.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"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第一个界面" /> </LinearLayout>
//Fragment1.java package com.example.demo12; import android.support.v4.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by WANG on 2016/9/30 0030. */ public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.view1, container, false); } }