1ListFragment

今天首先学习了一种很经常使用的展示场景:列表展示。

昨天学习了使用Fragmet来取代activity进行设计。今天在托管单个fragment的基础上,掌握托管一个布局list。先看下效果:  

由于Fragment列表须要使用ArrayList保存。而为了使Fragment对象受acrivity等生命周期影响, 创建例如以下单例类:

public class CrimeLab {private ArrayList<Crime> mCrimes;private static CrimeLab sCrimeLab;private  Context mAppContext;private CrimeLab(Context context){mAppContext=context;mCrimes=new ArrayList<Crime>();for(int i=0;i<100;i++){Crime c =new Crime();c.setTitle("Crime #"+i);c.setSolved(i%2==0);mCrimes.add(c);}}public static CrimeLab get(Context c){if(sCrimeLab==null){sCrimeLab=new CrimeLab(c.getApplicationContext());}return sCrimeLab;}public ArrayList<Crime> getmCrimes(){return mCrimes;}public Crime getCrime(UUID id){for (Crime c: mCrimes){if(c.getId().equals(id)){return c;}}return null;}
}

同一时候,还要建立对应的fragment布局文件和类文件。实际上,存在专门支持list fragment的类:ListFragment。继承这个类就可以。之后可使用其内置的listadapter。

为什么使用adapter呢? 由于我们的fragmentlab中新建了100个fragment对象,而我们不可能在一个页面中把他们所有显示出来。而是须要显示时才创建对象。

adapter就是从模型层获得数据。并把它提供给ListView显示的桥梁。

private class CrimeAdapter extends ArrayAdapter<Crime>{public CrimeAdapter(ArrayList<Crime> crimes){super(getActivity(),0,crimes);}@Overridepublic View getView(int position,View convertView,ViewGroup parent){if(convertView==null){convertView=getActivity().getLayoutInflater().inflate(R.layout.list_item_crime,null);}Crime c=getItem(position);TextView titleTextView=(TextView)convertView.findViewById(R.id.crime_list_item_titleTextView);titleTextView.setText(c.getTitle());TextView dateTextView=(TextView)convertView.findViewById(R.id.crime_list_item_dateTextView);dateTextView.setText(c.getDate().toString());CheckBox solvedCheckBox=(CheckBox)convertView.findViewById(R.id.crime_list_item_solvedCheckBox);solvedCheckBox.setChecked(c.isSolved());return convertView;}}

实现自己定制Adapater的代码。之所以要实现自己的adapter,是由于在list的每个条目我们定制了自己的布局。

如代码中的list_item_crime.

这样就得到了list显示的fragment。

2ViewPager

ViewPager能够实现左右滑动屏幕切换查看不同列表项的功能。

ViewPager须要借助于Adapter才可以提供视图。

通过PagerAdapter的子类:FragmentStatePagerAdapter来处理两者间的配合问题。

这里须要实现两个方法,getCount()和getItem()。

代码示比例如以下:

mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) {@Overridepublic int getCount(){return mCrimes.size();}@Overridepublic Fragment getItem(int pos) {Crime crime=mCrimes.get(pos);return CrimeFragment.newInstance(crime.getId());}});

3 fragment传输数据

跟activity类似。fragment间也能够进行传输数据。并且fragment级的传输数据会使编程更加灵活。

试想例如以下场景: 在CrimeFragment中须要按键调出DatePickerFragment, 后者的初始化须要前者提供的数据。同一时候,DatePickerFragment的返回值也要作用于CrimeFragment。

须要做的事情有例如以下几步:

1)从CrimeFragment 初始化DatePickerFragment时, 将数据作为构造參数传入

2)DatePickerFragment构造时。将传入的值保存到argument

3)DatePickerFragment渲染时,取arguments中值

4)DatePickerFragment将值回传给CrimeFragment

为实现以上过程,首先要在DatePickerFragment 编写newInstance方法, 改方法能够在实例化DatePickerFragment时被调用并接受參数。同一时候在fragment create前准备好数据

public static DatePickerFragment newInstance(Date date){Bundle args=new Bundle();args.putSerializable(EXTRA_DATE,date);DatePickerFragment fragment=new DatePickerFragment();fragment.setArguments(args);return fragment;}

返回数据时,则覆盖onActivityResult方法。

交互过程如: 

Android五天乐(第三天)ListFragment与ViewPager相关推荐

  1. android真实项目教程(五)——有时三点两点雨_by_CJJ

    大家傍晚好,我是cjj,过多十几分钟就下班了,肚子饿到要死,马上可以吃饭了...呵呵...最近事情很多,要做毕设写论文,又要上班,班里又搞什么班照,系里又一些鸡毛小事就可以累死你...晕...好像在传 ...

  2. Android Fragment(三)ListFragment简单介绍以及Fragment之间通信

    一.Fragment通信简单介绍:Fragments之间是不能够直接通信的,他们之间的通信是通过Activity这个中间件来通信的, 为了让Fragment跟它的Activity通信,我们可以在Fra ...

  3. Android项目实战(三十二):圆角对话框Dialog

    原文:Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对 ...

  4. Android日志[进阶篇]三-Logcat 命令行工具

    Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...

  5. Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程)...

    Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程) 原文:Android项目实战(三十八):2017最新 将AndroidLibrary ...

  6. android真实项目教程(三)——首页初点缀_by_CJJ

    大家晚上好,CJJ不好,前天打球,把右手弄脱臼了...搞得我现在只能一只手敲代码...那效率,我给自己跪了 ...写了好久,才写了那么一丁点...明明还有好多要说的...也只能等手好了再继续吧...呵 ...

  7. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇--ActivityGroup实现tab功能>.这 ...

  8. 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ  A2DP.SINK.sink_connect.s ...

  9. Android 天气APP(三十四)语音搜索

    上一篇:Android 天气APP(三十三)语音播报 语音搜索 前言 正文 一.权限配置 二.用户体验优化 三.配置语音识别听写 四.语音搜索 五.地图天气添加语音搜索功能 六.城市搜索添加语音搜索功 ...

最新文章

  1. JS中的null和undefined,undefined为啥用void 0代替?
  2. android字体行距,android textview设置字体的行距和字间距
  3. lucene4.7 高亮功能(八)
  4. Outlook应用指南(1)——数据备份还原技巧
  5. java xmpp openfire_搭建Xmpp服务器Openfire
  6. php curl form-data,在php curl multipart / form-data请求中发送一个文件和json数据
  7. Apache kafka原理与特性(0.8V)
  8. Java7并发编程指南——第二章:线程同步基础
  9. 一加7T Pro曝光:10月10日发布
  10. [No00009E]几种常见的命名规则
  11. ionic4 返回键退出app
  12. Mongodb总结1-启动和Shell脚本
  13. php 取消命名空间,到PHP命名空间或不到PHP命名空间
  14. iview的select联动_render函数渲染的iview中的Select组件如何联动?
  15. 如何快速压缩PPT文件?
  16. Leet Code OJ 刷题顺序参考
  17. 商品详情页实现价格区间价
  18. Android 状态栏工具类(实现沉浸式状态栏/变色状态栏)
  19. 今天下午去京东物流应聘快递员
  20. jaDate日期控件 开始日期与结束日期、日期联动

热门文章

  1. 两台笔记本的操作系统都为xp的共享上网教程
  2. svn 在windows下创建仓库子目录失败解决办法
  3. 大数据之-入门_Hadoop发展历史---大数据之hadoop工作笔记0009
  4. SpringCloud工作笔记058---springBoot项目maven命令打包部署
  5. Linux学习笔记021---Centos7 下 MySql too many connections 报错
  6. python数据结构剑指offer-两个链表的第一个公共结点
  7. 2013浙大878操作系统大题答案解析
  8. PicPick手册:绿色小巧功能多的截屏软件
  9. 一摞烙饼最上面一个的另一面为焦的概率
  10. 如何使frame能居中显示