FragmentPagerAdapter

FragmentPagerAdapter是PagerAdapter中的其中一种实现。它将每一个页面表示为一个 Fragment,并且每一个Fragment都将会保存到fragment manager当中。而且,当用户没可能再次回到页面的时候,fragment manager才会将这个Fragment销毁。

这种pager十分适用于有一些静态fragment,例如一组tabs,的时候使用。每个页面对应的Fragment当用户可以访问的时候会一直存在内存中,但是,当这个页面不可见的时候,view hierarchy将会被销毁。这样子会导致应用程序占有太多资源。当页面数量比较大的时候,建议使用 FragmentStatePagerAdapter

当使用FragmentPagerAdapter的时候,ViewPager一定要使用正确的ID set

FragmentPagerAdapter的子类只要实现 getItem(int)  getCount()方法。

下面是示例代码:

publicclassFragmentPagerSupportextendsFragmentActivity{

   staticfinalint NUM_ITEMS =10;

 

   MyAdapter mAdapter;

 

   ViewPager mPager;

 

   @Override

   protectedvoid onCreate(Bundle savedInstanceState){

       super.onCreate(savedInstanceState);

       setContentView(R.layout.fragment_pager);

 

       mAdapter =newMyAdapter(getSupportFragmentManager());

 

       mPager =(ViewPager)findViewById(R.id.pager);

       mPager.setAdapter(mAdapter);

 

       // Watchfor button clicks.

        Button button =(Button)findViewById(R.id.goto_first);

       button.setOnClickListener(newOnClickListener(){

            publicvoid onClick(View v){

                mPager.setCurrentItem(0);

            }

       });

       button =(Button)findViewById(R.id.goto_last);

       button.setOnClickListener(newOnClickListener(){

            publicvoid onClick(View v){

                mPager.setCurrentItem(NUM_ITEMS-1);

            }

       });

   }

 

   publicstaticclassMyAdapterextendsFragmentPagerAdapter{

       publicMyAdapter(FragmentManager fm){

            super(fm);

       }

 

       @Override

       publicint getCount(){

            return NUM_ITEMS;

       }

 

       @Override

       publicFragment getItem(int position){

            returnArrayListFragment.newInstance(position);

       }

   }

 

   publicstaticclassArrayListFragmentextendsListFragment{

       int mNum;

 

       /**

         * Create a new instance ofCountingFragment, providing "num"

         * as an argument.

         */

       staticArrayListFragment newInstance(int num){

            ArrayListFragment f =newArrayListFragment();

 

            // Supply num input as an argument.

            Bundle args =newBundle();

            args.putInt("num", num);

            f.setArguments(args);

 

            return f;

       }

 

       /**

         * When creating, retrieve thisinstance's number from its arguments.

         */

       @Override

       publicvoid onCreate(Bundle savedInstanceState){

            super.onCreate(savedInstanceState);

            mNum = getArguments()!=null? getArguments().getInt("num"):1;

       }

 

       /**

         * The Fragment's UI is just a simpletext view showing its

         * instance number.

        */

       @Override

       publicView onCreateView(LayoutInflater inflater,ViewGroup container,

                Bundle savedInstanceState){

            View v = inflater.inflate(R.layout.fragment_pager_list, container,false);

            View tv = v.findViewById(R.id.text);

            ((TextView)tv).setText("Fragment #"+ mNum);

            return v;

       }

 

       @Override

       publicvoid onActivityCreated(Bundle savedInstanceState){

            super.onActivityCreated(savedInstanceState);

            setListAdapter(newArrayAdapter<String>(getActivity(),

                    android.R.layout.simple_list_item_1,Cheeses.sCheeseStrings));

       }

 

       @Override

       publicvoid onListItemClick(ListView l,View v,int position,long id){

            Log.i("FragmentList","Item clicked: "+ id);

       }

   }

}

The R.layout.fragment_pager resource of the top-level fragment is:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

       android:orientation="vertical"android:padding="4dip"

       android:gravity="center_horizontal"

       android:layout_width="match_parent"android:layout_height="match_parent">

 

   <android.support.v4.view.ViewPager

            android:id="@+id/pager"

            android:layout_width="match_parent"

            android:layout_height="0px"

            android:layout_weight="1">

   </android.support.v4.view.ViewPager>

 

   <LinearLayoutandroid:orientation="horizontal"

            android:gravity="center"android:measureWithLargestChild="true"

            android:layout_width="match_parent"android:layout_height="wrap_content"

            android:layout_weight="0">

       <Buttonandroid:id="@+id/goto_first"

            android:layout_width="wrap_content"android:layout_height="wrap_content"

            android:text="@string/first">

       </Button>

       <Buttonandroid:id="@+id/goto_last"

            android:layout_width="wrap_content"android:layout_height="wrap_content"

            android:text="@string/last">

       </Button>

   </LinearLayout>

</LinearLayout>

The R.layout.fragment_pager_list resource containing each individualfragment's layout is:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   android:orientation="vertical"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:background="@android:drawable/gallery_thumb">

 

   <TextViewandroid:id="@+id/text"

       android:layout_width="match_parent"android:layout_height="wrap_content"

       android:gravity="center_vertical|center_horizontal"

       android:textAppearance="?android:attr/textAppearanceMedium"

       android:text="@string/hello_world"/>

 

   <!-- Theframe layout is here since we will be showing either

   the empty view or the list view. -->

   <FrameLayout

       android:layout_width="match_parent"

       android:layout_height="0dip"

       android:layout_weight="1">

       <!--Here is the list. Since we are using a ListActivity, we

             have to call it"@android:id/list" so ListActivity will

             find it -->

       <ListViewandroid:id="@android:id/list"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:drawSelectorOnTop="false"/>

 

       <!--Here is the view to show if the list is emtpy -->

       <TextViewandroid:id="@android:id/empty"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:textAppearance="?android:attr/textAppearanceMedium"

            android:text="No items."/>

 

   </FrameLayout>

 

</LinearLayout>

你可能感兴趣的:(Android开发,android平台)