当前位置: 移动技术网 > IT编程>移动开发>Android > Android App在ViewPager中使用Fragment的实例讲解

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

总裁的赎爱宝贝,信徒使者电视剧,九阳电磁炉故障代码

据说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, 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); 
      } 
    } 
  } 
 
  // 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 
  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接口手动设置了页面指示条的位置。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网