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