Android App在ViewPager中使用Fragment的实例讲解

Android App在ViewPager中使用Fragment的实例讲解,第1张

概述据说Android最推荐的是在ViewPager中使用FragMent,即ViewPager中的页面不像前面那样用LayoutInflater直接从布局文件加载,而是一个个Fragment。注意这里的Fragment

据说AndroID最推荐的是在VIEwPager中使用FragMent,即VIEwPager中的页面不像前面那样用LayoutInflater直接从布局文件加载,而是一个个Fragment。注意这里的Fragment

是androID.support.v4.vIEw包里的Fragment,而不是androID.app包里的Fragment。

使用v4包里的Fragment的Activity必须继承自FragmentActivity。

其实使用Fragment与前面不使用Fragment非常类似:

第一步 在主布局文件里放一个VIEwPager组件

第二步 为每个页面建立布局文件,把界面写好

第三步 为每个页面新建Fragment类,并加载布局文件中的界面

第四部 为VIEwPager设定Adapter,只不过这里的Adapter不是PagerAdapter,而是换成

FragmentPagerAdapter,实现两个方法:

getCount():返回页面数目

getItem(position):返回position位置的Fragment。

下面来看一个VIEwPager与Fragment实现页面滑动效果的例子:

首先继承FragmentActivity,
为VIEwPager提供展示所需的Fragment和FragmentPagerAdapter:
Fragment来指定页面的布局以及功能

// fragment private class MyFragment extends Fragment {    private String text;   private int color;    public MyFragment(String text,int color) {     this.text = text;     this.color = color;   }    @OverrIDe   public VIEw onCreateVIEw(LayoutInflater inflater,@Nullable VIEwGroup container,@Nullable Bundle savedInstanceState) {     TextVIEw tv = new TextVIEw(MainActivity.this);     tv.setBackgroundcolor(color);     tv.setText(text);     return tv;   } } 

adapter指定该VIEwpager有多少页面以及那个位置需要显示哪个页面:

// adapter   private class MyAdapter extends FragmentPagerAdapter {     public MyAdapter(FragmentManager fm) {       super(fm);     }      @OverrIDe     public int getCount() {       return pages.size();     }      @OverrIDe     public Fragment getItem(int arg0) {       return pages.get(arg0);     }   } 

设置OnPagechangelistener,指定页面改变时需要做什么其他 *** 作:

@OverrIDe public voID onPageScrollStateChanged(int arg0) {  }  @OverrIDe public voID onPageScrolled(int arg0,float arg1,int arg2) {   linearLayout.LayoutParams lp = (androID.Widget.linearLayout.LayoutParams) tabline.getLayoutParams();   lp.leftmargin = (int) ((arg0 + arg1) * mTablinewidth);   tabline.setLayoutParams(lp); }  @OverrIDe public voID onPageSelected(int arg0) {   // set Titles   for (int i = 0; i < Titles.size(); i++) {     if (arg0 == i) {       Titles.get(i).setSelected(true);     } else {       Titles.get(i).setSelected(false);     }   } } 

完整的代码:

package com.hzy.myvIEwpager;  import java.util.ArrayList;  import androID.graphics.color; import androID.os.Bundle; import androID.support.annotation.Nullable; import androID.support.v4.app.Fragment; import androID.support.v4.app.FragmentActivity; import androID.support.v4.app.FragmentManager; import androID.support.v4.app.FragmentPagerAdapter; import androID.support.v4.vIEw.VIEwPager; import androID.support.v4.vIEw.VIEwPager.OnPagechangelistener; import androID.util.displayMetrics; import androID.vIEw.display; import androID.vIEw.LayoutInflater; import androID.vIEw.VIEw; import androID.vIEw.VIEwGroup; import androID.vIEw.VIEw.OnClickListener; import androID.vIEw.VIEwGroup.LayoutParams; import androID.Widget.linearLayout; import androID.Widget.TextVIEw;  import com.hzy.myvIEwpager.R.ID;  public class MainActivity extends FragmentActivity implements OnPagechangelistener,OnClickListener {    VIEwPager pager = null;   VIEw tabline = null;   private int mTablinewidth;    // Titles   TextVIEw Title1 = null;   TextVIEw Title2 = null;   TextVIEw Title3 = null;    ArrayList<TextVIEw> Titles = null;   ArrayList<Fragment> pages = null;    @OverrIDe   protected voID onCreate(Bundle arg0) {     super.onCreate(arg0);     initVIEw();     initTabline();   }    private voID initVIEw() {     setContentVIEw(R.layout.activity_main);     pages = new ArrayList<Fragment>();     Titles = new ArrayList<TextVIEw>();      pager = (VIEwPager) findVIEwByID(ID.main_vIEwpager);     Title1 = (TextVIEw) findVIEwByID(ID.main_tab1);     Title2 = (TextVIEw) findVIEwByID(ID.main_tab2);     Title3 = (TextVIEw) findVIEwByID(ID.main_tab3);      Title1.setonClickListener(this);     Title2.setonClickListener(this);     Title3.setonClickListener(this);      Titles.add(Title1);     Titles.add(Title2);     Titles.add(Title3);      // create new fragments     pages.add(new MyFragment("tab1",color.BLUE));     pages.add(new MyFragment("tab2",color.RED));     pages.add(new MyFragment("tab3",color.CYAN));      // set adapter     pager.setAdapter(new MyAdapter(getSupportFragmentManager()));     pager.setonPagechangelistener(this);     pager.setCurrentItem(0);     Titles.get(0).setSelected(true);   }    // tablines   private voID initTabline() {     tabline = findVIEwByID(ID.main_tab_line);     display display = getwindow().getwindowManager().getDefaultdisplay();     displayMetrics outMetrics = new displayMetrics();     display.getMetrics(outMetrics);     mTablinewidth = outMetrics.wIDthPixels / 3;     LayoutParams lp = tabline.getLayoutParams();     lp.wIDth = mTablinewidth;     tabline.setLayoutParams(lp);   }    @OverrIDe   public voID onClick(VIEw v) {     switch (v.getID()) {     case ID.main_tab1:       pager.setCurrentItem(0,true);       break;     case ID.main_tab2:       pager.setCurrentItem(1,true);       break;     case ID.main_tab3:       pager.setCurrentItem(2,true);       break;     default:       break;     }   }    @OverrIDe   public voID onPageScrollStateChanged(int arg0) {    }    @OverrIDe   public voID onPageScrolled(int arg0,int arg2) {     linearLayout.LayoutParams lp = (androID.Widget.linearLayout.LayoutParams) tabline.getLayoutParams();     lp.leftmargin = (int) ((arg0 + arg1) * mTablinewidth);     tabline.setLayoutParams(lp);   }    @OverrIDe   public voID onPageSelected(int arg0) {     // set Titles     for (int i = 0; i < Titles.size(); i++) {       if (arg0 == i) {         Titles.get(i).setSelected(true);       } else {         Titles.get(i).setSelected(false);       }     }   }    // fragment   private class MyFragment extends Fragment {      private String text;     private int color;      public MyFragment(String text,int color) {       this.text = text;       this.color = color;     }      @OverrIDe     public VIEw onCreateVIEw(LayoutInflater inflater,@Nullable Bundle savedInstanceState) {       TextVIEw tv = new TextVIEw(MainActivity.this);       tv.setBackgroundcolor(color);       tv.setText(text);       return tv;     }   }    // adapter   private class MyAdapter extends FragmentPagerAdapter {     public MyAdapter(FragmentManager fm) {       super(fm);     }      @OverrIDe     public int getCount() {       return pages.size();     }      @OverrIDe     public Fragment getItem(int arg0) {       return pages.get(arg0);     }   } } 

代码中通过实现OnPagechangelistener接口手动设置了页面指示条的位置。

总结

以上是内存溢出为你收集整理的Android App在ViewPager中使用Fragment的实例讲解全部内容,希望文章能够帮你解决Android App在ViewPager中使用Fragment的实例讲解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141613.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存