据说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的实例讲解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)