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
}
}
}
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>
<?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