现在的位置: 首页 > 综合 > 正文

ActionBarSherlock与Fragment及ViewPager结合实现滑动切换页面

2018年06月05日 ⁄ 综合 ⁄ 共 4721字 ⁄ 字号 评论关闭

ActionBarSherlock的使用在前两篇有详细的介绍,在这里就不进行赘述了,现在要实现的功能是对上一篇中的demo进行二次开发,实现滑动切换界面的功能,实现的思路是使用Viewpager来实现滑动【代码中有详细的注解,这里就不做过多陈述】。源码如下:

MainActivity.java代码:

public class MainActivity extends SherlockFragmentActivity {

	/*定义ActionBar*/
	private ActionBar mActionBar;
	/*定义ViewPager对象*/
	private ViewPager mViewPager;
	/*定义Adapter*/
	private ViewPagerAdapter mAdapter;
	/*定义一个View集合*/
	private ArrayList<View> mViews;
	/*定义ActionBar的Tab*/
	private ArrayList<Tab> mTabs;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		/*获取actionBar*/
		mActionBar = this.getSupportActionBar();
		/*设置actionBar为Tab方式进行导航*/
		mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		/*禁用ActionBar的标题*/
		mActionBar.setDisplayShowTitleEnabled(false);
		/*禁用ActionBar图标*/
		mActionBar.setDisplayUseLogoEnabled(false);
		/*禁用ActionBar返回键*/
		mActionBar.setDisplayHomeAsUpEnabled(false);
		
		/*创建Tabs集合*/
		mTabs = new ArrayList<ActionBar.Tab>();
		
		/*创建Tab1*/
		ActionBar.Tab tab1 = mActionBar.newTab();
		tab1.setText("摇一摇");
		/*设置tab 的监听事件(这个必须设置否则没有用)*/
		tab1.setTabListener(new MyTabListener(new Fragment1()));
		/*把tab1添加到tab集合中*/
		mTabs.add(tab1);
		/*把tab1添加到actionBar中*/
		mActionBar.addTab(tab1);
		
		/*创建Tab2*/
		ActionBar.Tab tab2 = mActionBar.newTab();
		tab2.setText("餐厅");
		/*设置tab的监听事件,这个必须设置,否则会出错*/
		tab2.setTabListener(new MyTabListener(new Fragment2()));
		/*把tab2添加到集合中*/
		mTabs.add(tab2);
		/*把tab2添加到ActionBar中*/
		mActionBar.addTab(tab2);
		
		
		/*获取ViewPager*/
		mViewPager = (ViewPager) this.findViewById(R.id.vPager);
		
		/*创建view集合*/
		mViews = new ArrayList<View>();
		/*向view集合中添加view对象*/
		mViews.add(LayoutInflater.from(this).inflate(R.layout.lay1, null));
		mViews.add(LayoutInflater.from(this).inflate(R.layout.lay2, null));
		
		/*初始化适配器*/
		mAdapter = new ViewPagerAdapter(this.getSupportFragmentManager());
		
		/*设置适配器*/
		mViewPager.setAdapter(mAdapter);
		
		/*设置viewPager的监听事件*/
		mViewPager.setOnPageChangeListener(new MyPageChangeListener());
		/*设置默认显示第一项*/
		mViewPager.setCurrentItem(0);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getSupportMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	/**
	 * 定义onPageChangeListener内部类
	 */
	class MyPageChangeListener implements OnPageChangeListener{

		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub
			
		}

		/**
		 * 这个方法很重要
		 */
		public void onPageSelected(int index) {

			/*设置当前要显示的View*/
			mViewPager.setCurrentItem(index);
			/*让actionBar选中对应的Tab*/
			mActionBar.selectTab(mTabs.get(index));
			
		}
		
	}
	
	
	/**
	 * 定义Tablistener内部类
	 */
	class MyTabListener implements TabListener{

		private Fragment fragment;
		/*构造函数*/
		public MyTabListener(Fragment fragment) {
			super();
			this.fragment = fragment;
		}

		@Override
		public void onTabSelected(Tab tab, FragmentTransaction ft) {
			
			if (mViewPager != null){
				/*把tab设置到ViewPager中,这就是为什么tab能滑动的原因*/
				mViewPager.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
			
		}
		
	}
}

适配器ViewPagerAdapter.java代码:

public class ViewPagerAdapter extends FragmentPagerAdapter {

	/* 定义两个Fragment索引 */
	private static final int FRAGMENT_INDEX_1 = 0;
	private static final int FRAGMENT_INDEX_2 = 1;

	public ViewPagerAdapter(FragmentManager fm) {
		super(fm);

	}

	@Override
	public Fragment getItem(int index) {

		System.out.println("index:" + index);
		Fragment mFragment = null;

		switch (index) {
		case FRAGMENT_INDEX_1:
			mFragment = new Fragment1();
			break;

		case FRAGMENT_INDEX_2:
			mFragment = new Fragment2();
			break;

		default:
			break;
		}
		return mFragment;
	}

	@Override
	public int getCount() {

		return 2;
	}

}

Fragment1.java与Fragment2.java代码类似:

public class Fragment1 extends SherlockFragment {

	/**
	 * 返回fragment视图
	 */
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		
		View rootView = inflater.inflate(R.layout.lay1, container, false);
		
		return rootView;
	}
}

activity_main.java代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/vPager"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_gravity="center"
        android:layout_weight="1.0"
        android:background="#000000"
        android:flipInterval="30"
        android:persistentDrawingCache="animation" />

</LinearLayout>

lay1.xml代码与lay2.xml代码类似:

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

不要忘记在清单文件中修改主题样式:

android:theme="@style/Theme.Sherlock.Light" 

demo效果展示:

下载demo:http://download.csdn.net/detail/lzm1340458776/7320561

抱歉!评论已关闭.