ActionBar和ViewPager实现Fragment页面的切换
最后的效果图:
①.xml文件:
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context="com.tryone.tyrone_viewpageractionbar.MainActivity" > 6 7 <android.support.v4.view.ViewPager 8 android:id="@+id/viewpager" 9 android:layout_width="match_parent" 10 android:layout_height="match_parent" 11 ></android.support.v4.view.ViewPager> 12 </RelativeLayout>
②.MainActivity代码:
1 public class MainActivity extends FragmentActivity implements OnPageChangeListener, TabListener { 2 3 private ViewPager mVp; 4 private List<Fragment> mlist; 5 private ActionBar bar; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main); 11 mVp = (ViewPager) findViewById(R.id.viewpager); 12 13 bar = getActionBar(); 14 bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 15 bar.addTab(bar.newTab().setText("新闻").setTabListener(this)); 16 bar.addTab(bar.newTab().setText("游戏").setTabListener(this)); 17 bar.addTab(bar.newTab().setText("美女").setTabListener(this)); 18 bar.addTab(bar.newTab().setText("娱乐").setTabListener(this)); 19 20 mlist = new ArrayList<Fragment>(); 21 for (int i = 0; i < 4; i++) { 22 23 MyFragment fragment = new MyFragment(); 24 Bundle bundle = new Bundle(); 25 bundle.putInt("index", i); 26 fragment.setArguments(bundle); 27 mlist.add(fragment); 28 29 } 30 31 MyAdapter adapter = new MyAdapter(getSupportFragmentManager()); 32 mVp.setAdapter(adapter); 33 mVp.setOnPageChangeListener(this); 34 } 35 36 class MyAdapter extends FragmentPagerAdapter { 37 38 public MyAdapter(FragmentManager fm) { 39 super(fm); 40 41 } 42 43 @Override 44 public Fragment getItem(int arg0) { 45 46 return mlist.get(arg0); 47 } 48 49 @Override 50 public int getCount() { 51 52 return mlist.size(); 53 } 54 55 } 56 57 /******* TabList的监听 ***********************************/ 58 @SuppressWarnings("deprecation") 59 @Override 60 public void onTabSelected(Tab tab, FragmentTransaction ft) { 61 62 // 控制ViewPager的页面切换 63 int position = tab.getPosition(); 64 // 设置当前条目 65 mVp.setCurrentItem(position); 66 } 67 68 @Override 69 public void onTabUnselected(Tab tab, FragmentTransaction ft) { 70 71 } 72 73 @Override 74 public void onTabReselected(Tab tab, FragmentTransaction ft) { 75 76 } 77 78 /******************* ViewPager的页面监听 *****************************/ 79 @Override 80 public void onPageScrollStateChanged(int arg0) { 81 82 } 83 84 @Override 85 public void onPageScrolled(int arg0, float arg1, int arg2) { 86 87 } 88 89 @Override 90 public void onPageSelected(int arg0) { 91 92 // 控制ActionBar的选项. 93 // 设置ActionBar的选择的导航条目 94 bar.setSelectedNavigationItem(arg0); 95 } 96 }
③.Fragment只用了一个for循环,实际中自己创建多个Fragment,来进行关联;
1 public class MyFragment extends Fragment { 2 3 @Override 4 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 5 View view = inflater.inflate(R.layout.fragment_layout, null); 6 TextView tv = (TextView) view.findViewById(R.id.fragment); 7 Bundle bundle = getArguments(); 8 int index = bundle.getInt("index", 0); 9 switch (index) { 10 case 0: 11 tv.setText("新闻"); 12 break; 13 case 1: 14 tv.setText("游戏"); 15 break; 16 case 2: 17 tv.setText("美女"); 18 break; 19 case 3: 20 tv.setText("娱乐"); 21 break; 22 } 23 return view; 24 } 25 26 }