使用ViewPager和Fragment实现滑动导航

jopen 12年前

ViewPage是android-support-v4.jar包提供的用于页面滑动的库,android-support-v4.jar是google推荐使用的一个类库,在项目中使用之前,你必须其添加到项目中(项目点右键Build path->configure build path,然后找到jar进行添加)

1.在xml布局文件中添加android.support.v4.view.ViewPager容器及显示导航所用标签android.support.v4.view.PagerTitleStrip,如我添加的xml内容如下

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:id="@+id/pager"      android:layout_width="match_parent"      android:layout_height="match_parent"      tools:context=".MainActivity" >        <!--      This title strip will display the currently visible page title, as well as the page      titles for adjacent pages.      -->        <android.support.v4.view.PagerTitleStrip          android:id="@+id/pager_title_strip"          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:layout_gravity="top"          android:background="#33b5e5"          android:paddingBottom="4dp"          android:paddingTop="4dp"          android:textColor="#fff" />    </android.support.v4.view.ViewPager>


2.在activity中导入以下包
import android.support.v4.app.FragmentActivity;  import android.support.v4.app.FragmentManager;  import android.support.v4.app.FragmentPagerAdapter;  import android.support.v4.view.ViewPager;

3.声明变量

SectionsPagerAdapter mSectionsPagerAdapter;  ViewPager mViewPager;


4.在onCreate中对其进行初始化
mSectionsPagerAdapter = new SectionsPagerAdapter(      getSupportFragmentManager());    // Set up the ViewPager with the sections adapter.  mViewPager = (ViewPager) findViewById(R.id.pager);  mViewPager.setAdapter(mSectionsPagerAdapter);
5.添加类SectionsPagerAdapter,我这里使用了3个标签
public class SectionsPagerAdapter extends FragmentPagerAdapter {      public SectionsPagerAdapter(FragmentManager fm) {     super(fm);    }      @Override    public Fragment getItem(int position) {     // getItem is called to instantiate the fragment for the given page.     // Return a DummySectionFragment (defined as a static inner class     // below) with the page number as its lone argument.     Fragment fragment = new HjFragment();     Bundle args = new Bundle();     args.putInt("no", position + 1);     fragment.setArguments(args);       return fragment;    }      @Override    public int getCount() {     // Show 3 total pages.     return 3;    }      @Override    public CharSequence getPageTitle(int position) {     switch (position) {     case 0:      return "标签1";     case 1:      return "标签2";     case 2:      return "标签3";     }     return null;    }   }

可以看到在getItem中返回了一个Fragment,这个就是当滑动到不同标签时显示在ViewPager中的内容,Fragment相当于一个Activity,在可以其中的onCreateView函数中构造需要显示的内容并返回

比如,以下代码将显示一个文本信息

@Override  public View onCreateView(LayoutInflater inflater, ViewGroup container,    Bundle savedInstanceState) {   TextView textView = new TextView(getActivity());   textView.setGravity(Gravity.CENTER);   textView.setText("你选择了标签:"+Integer.toString(getArguments().getInt(     "no")));   return textView;    }