ActionBar与Pager结合实现“书签导航”
首先看MainActivity:
public class MainActivity extends AppCompatActivity implements ActionBar.TabListener{ private ViewPager viewPager; private List<Fragment> list; private ActionBar bar; private MyFragmentPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewPager); list = new ArrayList<>(); for(int i=0;i<3;i++){
//实例化Fragment,并向其传递数据 MyFragment myFragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putInt("type",i); myFragment.setArguments(bundle); list.add(myFragment); } adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),list); viewPager.setAdapter(adapter);
//获得Activity的ActionBar bar = getSupportActionBar();//注意:这里是v7包下的ActionBar
//设定ActionBar的导航模式 bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//向ActionBar中增加标签页 bar.addTab(bar.newTab().setText("体育").setTabListener(this)); bar.addTab(bar.newTab().setText("娱乐").setTabListener(this)); bar.addTab(bar.newTab().setText("军事").setTabListener(this)); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) {
//让标签页与ViewPager联动 bar.setSelectedNavigationItem(position); } @Override public void onPageScrollStateChanged(int state) { } }); } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
//ViewPager与标签页联动 viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { } }
MainActiviy的布局文件:
其中只是放置了一个ViewPager
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.shen.actionbar.MainActivity"> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/viewPager"/> </RelativeLayout>
还有Fragment:
public class MyFragment extends Fragment { public MyFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_my, container, false); TextView textView = (TextView) view.findViewById(R.id.tvText);
//接收Activity传来的数据 Bundle bundle = getArguments(); int type = bundle.getInt("type"); switch (type){ case 0: textView.setText("军事"); break; case 1: textView.setText("娱乐"); break; case 2: textView.setText("体育"); break; } return view; }Fragment布局文件:
也很简单,放置一个TextView来显示文本
FrameLayout 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" tools:context="com.shen.actionbar.MyFragment"> <!-- TODO: Update blank fragment layout --> <TextView android:id="@+id/tvText" android:layout_width="match_parent" android:layout_height="match_parent" android:text="myFragmemt" /> </FrameLayout>
当然要进行书签导航翻页,FragmentPagerAdapter也是少不了的。
public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<Fragment> list; public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) { super(fm); this.list = list; } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } }完成这些就可以实现“书签导航”啦~
样式如图: