Android ViewPager+Fragment
来源:互联网 发布:阿里云金融云vpc专线 编辑:程序博客网 时间:2024/06/13 11:59
今天跟着视频的脚步,在学习完了简单的ViewPager之后,又紧接着学习了Viewpager+Fragment,即Fragment的复杂的页面显示,之所以称之为复杂的页面显示,主要是:1.允许放置Fragment,当Fragment存在,功能可以实现非常复杂,完善的功能,现代的客户端都会包含ViewPager+Fragment,由此可见非常重要。
那么如何去实现呢?其实和简单的ViewPager很相似,只不过不再是借助于PagerAdapter这个类去实现了,而是借助于FragmentPagerAdapter以及FragmentStatePagerAdapter两个适配器来进行ViewPager包含Fragment操作,这里主要是讲解使用FragmentPagerAdapter这个适配器来实现。
我们为了学习的方便,以模拟实现内涵段子的界面为背景进行学习的,主要是实现了页面的切换以及后期实现了RadioButton与ViewPager的交互,即点击哪一个相应的RadioButton,ViewPager将会跳转至哪一个界面,注意,我们只是实现了单方面的联动,只是RadioButton可以控制ViewPager,而ViewPager操控RadioButton笔者还没有实现。由于代码已经比较详细,这里直接上代码。
由于建立的文件比较多,先把类文件给大家看一下:
NeihanActivity.java的代码:
public class NeihanActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener { private ViewPager pager; //需要实现的Fragment private List<Fragment> fragments; //用于切换ViewPager private RadioGroup pagerSelector; public NeihanActivity() { } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_neihan); pager=(ViewPager)findViewById(R.id.neihan_viewpager); //!使用FragmentPagerAdapter来设置ViewPager的内容 //让每一个页面可以是Fragment fragments=new ArrayList<>(); fragments.add(new ChapterFragment()); fragments.add(new ImageFragment()); fragments.add(new SettingsFragment()); NeihanFragmentPagerAdapter adapter= new NeihanFragmentPagerAdapter(getSupportFragmentManager() ,fragments); pager.setAdapter(adapter); //RadioGroup pagerSelector=(RadioGroup) findViewById(R.id.pager_selector); pagerSelector.setOnCheckedChangeListener(this); } /** * * @param group * @param checkedId */ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { //获取当前容器内部有多少个子控件 int count=group.getChildCount(); int checkedPos=0; //遍历RadioGroup中的每一个RadioButton,看看第一个选中了 //因为ViewPager 设置显示页面,需要指定的是索引 for (int i=0;i<count;i++) { View v=group.getChildAt(i); if(v instanceof RadioButton) { RadioButton rb=(RadioButton) v; boolean checked=rb.isChecked(); if(checked) { checkedPos=i; //因为每次只能显示一页,所以只有一个按钮处于选中状态 //直接跳出循环就可以 break; } } } //设置ViewPager显示第几页,有过渡效果 //pager.setCurrentItem(checkedPos); //第二个参数的意思是是否有平滑滚动 pager.setCurrentItem(checkedPos,false); }}
NeihanFragmentPagerAdapter的代码:
public class NeihanFragmentPagerAdapter extends FragmentPagerAdapter { //默认构造函数一定要有 //两步实现:Ctrl i Ctrl O private List<Fragment> fragments; /** * 默认构造方法,当中的FragmentManager 一定是上一级组件的Manager * 例如Activity包含的ViewPager 指定Adapter时候, * 通过getSupportFragment, *例如在Fragment内部使用的ViewPager,那么 ViewPager Adapter * 应该是getChildFragmentManager() * @param fm */ public NeihanFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragments) { super(fm); this.fragments=fragments; } /** * 获取第几页的Fragment * @param position * @return */ @Override public Fragment getItem(int position) { return fragments.get(position); } /** * 获取页面的个数 * @return */ @Override public int getCount() { return fragments.size(); }}
ChapterFragment的代码:
public class ChapterFragment extends Fragment { public ChapterFragment() { } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_chapter,container,false); return view; }}
ImageFragment的代码:
public class ImageFragment extends Fragment { public ImageFragment() { } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_image,container,false); return view; }}
SettingsFragment的代码:
public class SettingsFragment extends Fragment { public SettingsFragment() { } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_settings,container,false); return view; }}
activity.xml代码:
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textColor="#f00" android:textSize="30sp" android:text="内涵"/> <android.support.v4.view.ViewPager android:id="@+id/neihan_viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > </android.support.v4.view.ViewPager> <RadioGroup android:id="@+id/pager_selector" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="段子"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图片"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="设置"/> </RadioGroup>
三个Fragment中就只是一个TextView的控件,这里就不再显示出来,自己添加就可以,当然这里只是为了测试,所以才将Fragement写的这么简单,自己可以根据需求添加一些复杂的功能。
好了,今天就学习了这么多,明天将会学习ViewPager的生命周期,如果时间充足将会进行服务的学习,明天又是新的一天,加油!!!
- Android Activity+ViewPager(Fragment)+Fragment
- android 中的 ViewPager+ Fragment
- android 中的 ViewPager+ Fragment
- Android ViewPager Fragment tab
- android 中的 ViewPager+ Fragment
- android 中的 ViewPager+ Fragment
- android 中的 ViewPager+ Fragment
- android fragment与ViewPager
- Android 中的 ViewPager+ Fragment
- Android学习--viewpager+ Fragment
- Android:Fragment+ViewPager+FragmentPagerAdapter
- Android中viewpager+fragment
- Android ViewPager+Fragment
- Android实现ViewPager+Fragment
- Tablayout+ViewPager+Fragment(Android)
- Android ViewPager嵌套Fragment
- android viewpager和fragment
- android ViewPager+Fragment封装无限循环ViewPager
- leetcode Reconstruct Itinerary
- 16 SequenceInputStream、PrintStream、Properties、递归、编码
- c++中int a, int *a=new int和 int *a=new int()
- kruskal算法
- 算法之美_源代码发布(11)——完结篇
- Android ViewPager+Fragment
- MFC CListView/CListCtrl OnSize时自动排列图标(尽量不出现滚动条)
- 三大简单排序算法(java)
- ##c提高篇## 第二课 体验函数【项目1-7】
- Mac下Nexue7 2012版刷机Android5.1
- HDU 3746 Cyclic Nacklace(kmp求循环节)
- jQuery16(内容过滤器,子元素过滤器)
- regex
- 深度解析Linux SSH