AndroidではViewPager、Fragment、PagerTabStripでマルチページスライド効果を実現

4443 ワード

原帖:http://www.cnblogs.com/trinea/archive/2012/11/23/2771273.html
ここでは、ViewPager、Fragment、PagerTabStripを使用してマルチページスライド効果を実現する方法について説明します.Googleプレイのトップページ、新浪微博ニュース(at、コメント、私信、放送)ページの効果です.ViewPager+Fragmentの組み合わせはgoogleの推奨方式で、TabActivity+Activityよりも効率が高い.
この効果はかなりいいです!
1、新しいViewPagerのlayout、内容は以下の通りです.
 


    
    
        
    

ViewPagerはlayoutを管理し、各ページデータを左右にスライド表示し、PagerTabStripはページtitle,android:layout_を表示します.gravity=「top」はtitleが上部にあり、bottomなどを設定できることを示します.
2、新しいFragmentActivityページFragmentActivityページにはViewPager要素が含まれており、Fragmentを表示するために使用できます.定義は以下の通りです.
 
FragmentActivity  

public class ViewPagerDemo extends FragmentActivity {

    /**   list **/
    List fragmentList = new ArrayList();
    /**   title list **/
    List   titleList    = new ArrayList();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_pager_demo);

        ViewPager vp = (ViewPager)findViewById(R.id.viewPager);
        fragmentList.add(new ViewPagerFragment1("  1"));
        fragmentList.add(new ViewPagerFragment1("  2"));
        fragmentList.add(new ViewPagerFragment1("  3"));
        titleList.add("title 1 ");
        titleList.add("title 2 ");
        titleList.add("title 3 ");
        vp.setAdapter(new myPagerAdapter(getSupportFragmentManager(), fragmentList, titleList));
    }

    /**
     *      
     * 
     * @author [email protected] 2012-11-15
     */
    class myPagerAdapter extends FragmentPagerAdapter {

        private List fragmentList;
        private List   titleList;

        public myPagerAdapter(FragmentManager fm, List fragmentList, List titleList){
            super(fm);
            this.fragmentList = fragmentList;
            this.titleList = titleList;
        }

        /**
         *       
         */
        @Override
        public Fragment getItem(int arg0) {
            return (fragmentList == null || fragmentList.size() == 0) ? null : fragmentList.get(arg0);
        }

        /**
         *      title
         */
        @Override
        public CharSequence getPageTitle(int position) {
            return (titleList.size() > position) ? titleList.get(position) : "";
        }

        /**
         *       
         */
        @Override
        public int getCount() {
            return fragmentList == null ? 0 : fragmentList.size();
        }
    }
}

myPagerAdapterはragmentPagerAdapterから統合され、ViewPagerにデータソースを提供します.
onCreate関数はViewPagerインスタンスを取得し、データソースを設定します.getSupportFragmentManagerはFragmentマネージャを取得します.ViewPagerFragment 1は具体的なページを表しており、以下の説明を参照してください.
3、新規FragmentページFragmentページは左右にスライドして表示するページで、新規クラス統合Fragmentを作成し、onCreateView関数を書き換える.onCreateView関数はActivityのonCreate関数に相当します.次のようになります.
public class ViewPagerFragment1 extends Fragment {

    private String   text;
    private TextView tv = null;

    public ViewPagerFragment1(String text){
        super();
        this.text = text;
    }

    /**
     *      ,   inflater inflate    view    
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.view_pager_fragment_demo1, container, false);
        tv = (TextView)v.findViewById(R.id.viewPagerText);
        tv.setText(text);
        return v;
    }
}

簡単な効果は次のとおりです.