ActionBar+ViewPager+Fragment实现滑动效果
在上个博客里我们已经知道了怎么点击来切换fragment这次我们要在此基础实现滑动的效果,感觉加上viewpager更简单了,
首先viewpager需要一个适配器,我们就自定义一个适配器并且继承FragmentPagerAdapter;
//自定义一个适配器继承FragmentPagerAdapter class ViewPagerAdapter extends FragmentPagerAdapter { public ViewPagerAdapter(FragmentManager fm) { super(fm); // TODO Auto-generated constructor stub } //返回的Fragment @Override public Fragment getItem(int item) { //声明一个Fragment Fragment f = null; switch (item) { case 0: f = new TicketsFragment(); break; case 1: f = new OrderFragment(); break; case 2: f = new MyFragment(); break; } return f; } //Fragment总数 @Override public int getCount() { // TODO Auto-generated method stub return 3; } }
然后把pager和adapter进行绑定,并且设置改变的监听事件
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); pager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub //设置标签的改变
bar.setSelectedNavigationItem(arg0); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } });
这时候我们还需要做件事情 就是滑动是在pager里,而点击标签是在布局之下,这两个不统一。我们要以viwepager为主,那我们怎么来修改呢?
首先我们要把TabListener这个实现类里改变页面不在变布局下,而是改变viewpager,这时候我们也不用传递参数了
class MyTabListenerImpl implements TabListener { @Override // 选中标签 public void onTabSelected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub //设置当前显示的位置 pager.setCurrentItem(tab.getPosition()); } @Override // 没有选中标签 public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } @Override // 重新选中标签 public void onTabReselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } }
这时候就完成了
布局代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/layoutmain" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
activity
package com.example.my12306; import android.os.Bundle; import android.app.ActionBar; import android.app.ActionBar.TabListener; import android.app.Activity; import android.app.FragmentTransaction; import android.app.ActionBar.Tab; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Menu; public class PeopleActivity extends FragmentActivity { private ViewPager pager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_people); final ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // 不显示标题 bar.setDisplayShowTitleEnabled(false); pager = (ViewPager) findViewById(R.id.pager); pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); pager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub bar.setSelectedNavigationItem(arg0); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); //添加的过程一定要放在viewpager之后 bar.addTab(bar .newTab() .setText("车票预订") .setTabListener( new MyTabListenerImpl())); bar.addTab(bar .newTab() .setText("订单查询") .setTabListener( new MyTabListenerImpl())); bar.addTab(bar .newTab() .setText("@我的") .setTabListener( new MyTabListenerImpl())); } class MyTabListenerImpl implements TabListener { @Override // 选中标签 public void onTabSelected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub //设置当前显示的位置 pager.setCurrentItem(tab.getPosition()); } @Override // 没有选中标签 public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } @Override // 重新选中标签 public void onTabReselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } } //自定义一个适配器继承FragmentPagerAdapter class ViewPagerAdapter extends FragmentPagerAdapter { public ViewPagerAdapter(FragmentManager fm) { super(fm); // TODO Auto-generated constructor stub } //返回的Fragment @Override public Fragment getItem(int item) { Fragment f = null; //判断是第几页然后new 出来传回去 switch (item) { case 0: f = new TicketsFragment(); break; case 1: f = new OrderFragment(); break; case 2: f = new MyFragment(); break; } return f; } //Fragment总数 @Override public int getCount() { // TODO Auto-generated method stub return 3; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.people, menu); return true; } }