Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客

通过上面的几步我们就指定ActionBarSherlock为ViewPagerAndTab的库工程,接下来我们就能在3.0以下使用ActionBar,我这里使用的是ActionBar Tab和ViewPager仿网易新闻,我们看看主要代码的编写

1.先看布局文件,里面一个ViewPager,非常简单

<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"><android.support.v4.view.ViewPagerandroid:id="@+id/viewPager"android:layout_width="fill_parent"android:layout_height="wrap_content" /></RelativeLayout>

2.MainActivity代码,点击ActionBar的Tab,ViewPager切换不同的Fragment,滑动ViewPager,选中相对应的ActiionBar Tab

package com.example.viewpagerandtabdemo;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import com.actionbarsherlock.app.ActionBar;import com.actionbarsherlock.app.ActionBar.Tab;import com.actionbarsherlock.app.SherlockFragmentActivity;public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener, OnPageChangeListener{/** * 顶部Tab的title */private String [] mTabTitles;/** * ViewPager对象的引用 */private ViewPager mViewPager;/** * 装载Fragment的容器,我们的每一个界面都是一个Fragment */private List<Fragment> mFragmentList;/** * ActionBar对象的引用 */private ActionBar mActionBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//从资源文件在获取Tab的titlemTabTitles = getResources().getStringArray(R.array.tab_title);mFragmentList = new ArrayList<Fragment>();mViewPager = (ViewPager) findViewById(R.id.viewPager);//设置AdaptermViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager(), mFragmentList));//设置监听mViewPager.setOnPageChangeListener(this);//获取Action实例我们使用getSupportActionBar()方法mActionBar = getSupportActionBar();//隐藏TitlemActionBar.setDisplayShowTitleEnabled(false);//隐藏Home logomActionBar.setDisplayShowHomeEnabled(false);//设置ActionBar的导航模式为TabmActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//为ActionBar添加Tab并设置TabListenerfor(int i=0; i<mTabTitles.length; i++){ActionBar.Tab tab = mActionBar.newTab();tab.setText(mTabTitles[i]);tab.setTabListener(this);mActionBar.addTab(tab, i);}//将Fragment加入到List中,并将Tab的title传递给Fragmentfor(int i=0; i<mTabTitles.length; i++){Fragment fragment = new ItemFragment();Bundle args = new Bundle();args.putString("arg", mTabTitles[i]);fragment.setArguments(args);mFragmentList.add(fragment);}}@Overridepublic void onTabSelected(Tab tab, FragmentTransaction ft) {//点击ActionBar Tab的时候切换不同的Fragment界面mViewPager.setCurrentItem(tab.getPosition());}@Overridepublic void onTabUnselected(Tab tab, FragmentTransaction ft) {}@Overridepublic void onTabReselected(Tab tab, FragmentTransaction ft) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int arg0) {//滑动ViewPager的时候设置相对应的ActionBar Tab被选中mActionBar.setSelectedNavigationItem(arg0);}}我们使用ActionBarSherlock的时候不再是继承Activity,而是继承SherlockActivity,SherlockDialogFragment,SherlockFragmentActivity等等,我这里用到Fragment,所以继承SherlockFragmentActivity,我们不能随便设置Activity的theme,以后我们要全屏显示的时候直接设置android:theme="@android:style/Theme.Black.NoTitleBar",我们使用ActionBar就不能这样设置了,并且不能随便设置他的Theme,必须是Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar,或者是他们的子样式,不然就会出java.lang.IllegalStateException异常,所以为了自定义ActionBar的Tab,我们必须修改其style

注意:我们还必须删除ViewPagerAndTab工程libs下面的android-support-v4.jar包,因为在ActionBarSherlock已经包含android-support-v4.jar

3.ViewPager的适配器TabPagerAdapter,因为我们用到Fragment,所以我们继承FragmentStatePagerAdapter而不是PagerAdapter

package com.example.viewpagerandtabdemo;import java.util.List;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentStatePagerAdapter;public class TabPagerAdapter extends FragmentStatePagerAdapter {private List<Fragment> list;//构造函数public TabPagerAdapter(FragmentManager fm, List<Fragment> list) {super(fm);this.list = list;}@Overridepublic Fragment getItem(int arg0) {return list.get(arg0);}@Overridepublic int getCount() {return list.size();}}人生就是一次充满未知的旅行,在乎的是沿途的风景,

Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客

相关文章:

你感兴趣的文章:

标签云: