ViewPager+Fragment的结合使用
2016-11-16 21:05
253 查看
前言:通常我们在完成一些分页界面时,假如每个子页中的内容较多或者是每个界面布局不一致,这时候假如使用普通的Viewpager+View的话,将会在主类中写出Very and Very多的逻辑,会显得主类代码非常臃肿,因此我们要将代码分块,最好是每个子页各自管自己的逻辑,那么最好的解决办法就是Viewpager中的每个子页中嵌套Fragment,也就是Viewpager+fragment的结合使用。接下来我们就通过代码一步步完成功能的实现:
子页FragmentA和子页FragmentA:
适配器(ViewPager叶片填充数据是Layout,页面少的话还可以,如果页面过多的话,全部加载到手机内存中,可能会耗尽内存,手动销毁又太麻烦。官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例。FragmentPagerAdapter和FragmentStatePagerAdapter这两个类都有简单的代码显示如何构建一个完整的用户界面,所以这里我们使用的父级适配器是FragmentPagerAdapter):
MainActivity主类:
布局文件:
fragmenta_pager_list.xml:
activity_main.xml:
ok,现在我们就完成了所有的操作。
子页FragmentA和子页FragmentA:
public class FragmentA extends Fragment { int mNum; //页号 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //这里我只是简单的用num区别标签 mNum = getArguments() != null ? getArguments().getInt("num") : 1; } /**为Fragment加载布局时调用**/ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragmenta_pager_list, null); TextView tv = (TextView) view.findViewById(R.id.text); tv.setText("fragmenta+" + mNum); return view; } } public class FragmentB extends Fragment { int mNum; //页号 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //这里我只是简单的用num区别标签 mNum = getArguments() != null ? getArguments().getInt("num") : 1; } /**为Fragment加载布局时调用**/ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragmentb_pager_list, null); TextView tv = (TextView) view.findViewById(R.id.text); tv.setText("fragmentb+" + mNum); return view; } }
适配器(ViewPager叶片填充数据是Layout,页面少的话还可以,如果页面过多的话,全部加载到手机内存中,可能会耗尽内存,手动销毁又太麻烦。官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例。FragmentPagerAdapter和FragmentStatePagerAdapter这两个类都有简单的代码显示如何构建一个完整的用户界面,所以这里我们使用的父级适配器是FragmentPagerAdapter):
public static FragmentPagerAdapter addFragment(FragmentManager fm) { List<Fragment> cacheFramentList = new ArrayList<>(); FragmentA fragmentA = new FragmentA(); Bundle bundleA = new Bundle(); bundleA.putInt("num", 1); fragmentA.setArguments(bundleA); cacheFramentList.add(fragmentA); FragmentB fragmentB = new FragmentB(); Bundle bundleB = new Bundle(); bundleB.putInt("num", 2); fragmentB.setArguments(bundleB); cacheFramentList.add(fragmentB); class MyPagerAdapter extends FragmentPagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } } return new MyPagerAdapter(fm); }
MainActivity主类:
public class MainActivity extends FragmentActivity { private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mViewPager = (ViewPager) findViewById(R.id.viewpager); //这里因为是3.0一下版本,所以需继承FragmentActivity,通过getSupportFragmentManager()获取FragmentManager //3.0及其以上版本,只需继承Activity,通过getFragmentManager获取事物 FragmentManager fm = getSupportFragmentManager(); //初始化自定义适配器 FragmentPagerAdapter mAdapter = addFragment(fm); //绑定自定义适配器 mViewPager.setAdapter(mAdapter); } }
布局文件:
fragmenta_pager_list.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:drawable/gallery_thumb" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical|center_horizontal" android:text="@string/hello_world" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
ok,现在我们就完成了所有的操作。
相关文章推荐
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- Android - Fragment+ViewPager结合使用
- 关于使用Fragment结合ViewPager实现滚动页面视图
- ViewPager和Fragment结合使用,可以做出顶部导航界面滑动效果
- Android结合fragment灵活使用ViewPager
- android控件篇:ViewPager+Fragment+GridView的使用(与AndroidQuery框架结合)
- Android开发ViewPager和Fragment结合使用实现新闻类app( 三 )(基本成型的app)
- 自定义viewpagerindicator和FragmentViewPager结合使用
- 防止ViewPager和Fragment结合使用时候的数据预加载
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- ViewPager+Fragment的结合使用
- ViewPager中结合使用fragmentPagerAdapter
- 多层Fragment与ViewPager结合使用
- android控件篇:ViewPager+Fragment+GridView的使用(与AndroidQuery框架结合)
- Fragment结合viewPager和下面4个页卡的使用
- 仿照微信的界面,即ViewPager+Fragment的结合使用
- android控制文件:ViewPager+Fragment+GridView使用(与AndroidQuery框架结合)
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- Android开发ViewPager和Fragment结合使用实现新闻类app基本框架(一)
- ViewPager和Fragment结合使用问题