Fragment与Viewpager及FragmentStatePagerAdapter
来源:互联网 发布:交友网站软件下载 编辑:程序博客网 时间:2024/05/16 09:18
前两篇我们讲过PagerAdapter和FragmentPagerAdapter,这里将介绍第三个适配器即FragmentStatePagerAdapter,它和ListView有点类似,会保存当前界面,以及下一个界面和上一个界面(如果有),最多会保存3个,其他会被销毁掉。需要注意的是FragmentStatePagerAdapter可能会不经意间造成内存未正常回收,严重导致内存溢出,比如图片资源没有释放,资源引用问题。
MainActivity.java代码:
public class MainActivity extends FragmentActivity {private ViewPager viewPager;static final int NUM_ITEMS = 10;// 定义一共有10页private MyAdapter adapter;private Button go_first;private Button go_last;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager = (ViewPager) this.findViewById(R.id.pager);adapter = new MyAdapter(getSupportFragmentManager());go_first = (Button) this.findViewById(R.id.goto_first);go_last = (Button) this.findViewById(R.id.goto_last);go_first.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubviewPager.setCurrentItem(0);}});go_last.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubviewPager.setCurrentItem(NUM_ITEMS - 1);}});viewPager.setAdapter(adapter);}// 填充适配器的数据:每一页都是Fragmentpublic static class MyAdapter extends FragmentStatePagerAdapter {public MyAdapter(FragmentManager fm) {super(fm);// TODO Auto-generated constructor stub}@Overridepublic Fragment getItem(int arg0) {// TODO Auto-generated method stubreturn ArrayListFragment.getIntances(arg0);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn NUM_ITEMS;}}public static class ArrayListFragment extends ListFragment {int num;static ArrayListFragment getIntances(int num) {ArrayListFragment listFragment = new ArrayListFragment();Bundle bundle = new Bundle();bundle.putInt("num", num);listFragment.setArguments(bundle);return listFragment;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onActivityCreated(savedInstanceState);setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, getData()));}public List<String> getData() {List<String> list = new ArrayList<String>();for (int i = 0; i < 20; i++) {list.add("jack" + i);}return list;}@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);System.out.println("------>>" + num);num = (getArguments() != null ? getArguments().getInt("num") : 1);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_pager_list, null);TextView textView = (TextView) view.findViewById(R.id.text);textView.setText("Fragment #" + num);// TODO Auto-generated method stubreturn view;}@Overridepublic void onPause() {// TODO Auto-generated method stubsuper.onPause();}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {Log.i("FragmentList", "Item clicked: " + id);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
<LinearLayout 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:gravity="center_horizontal" android:orientation="vertical" android:padding="4dip" tools:context=".MainActivity" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1" > </android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0" android:gravity="center" android:measureWithLargestChild="true" android:orientation="horizontal" > <Button android:id="@+id/goto_first" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳到首页" > </Button> <Button android:id="@+id/goto_last" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳到尾页" > </Button> </LinearLayout></LinearLayout>
fragment_pager_list.xml:
<?xml version="1.0" encoding="utf-8"?><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" /> <!-- The frame layout is here since we will be showing either the empty view or the list view. --> <FrameLayout android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" > <!-- Here is the list. Since we are using a ListActivity, we have to call it "@android:id/list" so ListActivity will find it --> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:drawSelectorOnTop="false" /> <!-- Here is the view to show if the list is emtpy --> <TextView android:id="@android:id/empty" android:layout_width="match_parent" android:layout_height="match_parent" android:text="No items." android:textAppearance="?android:attr/textAppearanceMedium" /> </FrameLayout></LinearLayout>
0 0
- Fragment与Viewpager及FragmentStatePagerAdapter
- PagerAdapter、FragmentPagerAdapter及FragmentStatePagerAdapter与Viewpager
- TabLayout+Fragment+ViewPager+FragmentStatePagerAdapter实现Tab标签
- Fragment与ViewPager及PagerAdapter
- Fragment与Viewpager及FragmentPagerAdapter
- [android]与 ViewPager fragment里面fragment和 FragmentStatePagerAdapter 的结果,在异常 (与完整的示例)
- android ViewPager学习(四)FragmentStatePagerAdapter viewpager内fragment的替换
- ViewPager-------Fragment作为ViewPager的数据源(FragmentStatePagerAdapter)
- ViewPager的setOffScreenPagerLimit()和FragmentStatePagerAdapter及FragmentPagerAdapter的区别与联系
- ViewPager搭配FragmentStatePagerAdapter如何获取Fragment的引用
- viewpager fragment FragmentStatePagerAdapter数据删除后更新界面
- Android Fragment两种适配FragmentPagerAdapter与FragmentStatePagerAdapter
- Fragment嵌套ViewPager+Fragment使用FragmentStatePagerAdapter报错,哪位大神帮我解决这个问题
- android fragment与ViewPager
- Fragment 与 ViewPager
- TabLayout、ViewPager与Fragment
- Fragment与ViewPager
- ActionBarSherlock与Fragment及ViewPager结合实现滑动切换页面
- 第十一周项目二发工资啦(2)
- Linux内核文件vmlinux 和压缩后的bzImage文件格式分析
- maven 3.2.1之概念简介与构建web应用
- android 开源项目下载
- noj 1560 Let Slimes Grow Up(线段树,lazy,暂未A)
- Fragment与Viewpager及FragmentStatePagerAdapter
- leetcode集锦 ( 不定期更新)
- C++ primer 读书笔记(4)
- MFC中的多线程设计
- javascript函数
- boost BOOST_IDENTITY_TYPE
- 网站二级导航标题特效
- js中call与apply用法
- RHEL6:中文环境切换成英文环境