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

来源:互联网 发布:鲁大师是什么软件 编辑:程序博客网 时间:2024/05/17 04:29

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;@Overrideprotected 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);}@Overridepublic 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{@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}@Overridepublic 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;}@Overridepublic void onTabSelected(Tab tab, FragmentTransaction ft) {if (mViewPager != null){/*把tab设置到ViewPager中,这就是为什么tab能滑动的原因*/mViewPager.setCurrentItem(tab.getPosition());}}@Overridepublic void onTabUnselected(Tab tab, FragmentTransaction ft) {// TODO Auto-generated method stub}@Overridepublic 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);}@Overridepublic 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;}@Overridepublic 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

0 0