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);
}
@Override
public 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) {

            @Override
public int getCount(){
return mCrimes.size();
}
@Override
public 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五天乐(第一天)开发环境的部署,开发流程与调试

    由于项目要求參与无线端开发,本着技多不压身的指导精神,决定依旧从web转攻client! 由于之前自己玩过两个月android(实际上仅仅是做了两个有失水准的demo级app),本来以为这次再来学习将 ...

  2. Android五天乐(第二天)Activity跳转与传输数据,Fragment

    1 Activity的生命周期 activity在生命周期内共同拥有执行.暂停,和停止三种状态.每次发生状态转换时,都有一个Activity方法将状态改变的消息通知给activity.activity ...

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

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

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

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

  5. 【转】android 电容屏(三):驱动调试之驱动程序分析篇

    关键词:android  电容屏 tp 工作队列 中断 坐点计算  电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0  平台:S5PV310( ...

  6. Android图表库MPAndroidChart(三)——双重轴线形图的实现,这次就so easy了

    Android图表库MPAndroidChart(三)--双重轴线形图的实现,这次就so easy了 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库 ...

  7. Android五种数据存储方式

    android 五种数据存储 :SharePreferences.SQLite.Contert Provider.File.网络存储 Android系统提供了四种存储数据方式.分别为:SharePre ...

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

    关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_ ...

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

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

随机推荐

  1. python 网络编程 粘包问题

    1.粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.   粘包出现原因 使用了优化方法(Nagle算法),将多次间隔较小.数据 ...

  2. 【BZOJ 1221】 [HNOI2001] 软件开发

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] /* 设一个超级源点S和超级汇点T S和2*i-1各连一条容量为ni的边. 花费为0 表示每天都会产生ni条要洗的毛巾 S和2*i各 ...

  3. Null值操作

      1)NULL值写入的操作    create table j010(     id number(7),     name varchar2(20),     salary number(7,2) ...

  4. Eureka Server的REST端点

    Eureka Server的REST端点 Windows下面可以安装Curl: 使用more命令可以显示xml内容: D:\Java\IdeaProjects>more rest-api-tes ...

  5. node15---cookie session

    二.Cookie和Session 2.1 Cookie ● HTTP是无状态协议.简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到,这是同一个浏览器在访问同一个网站.每一 ...

  6. m_Orchestrate learning system---十六、如何快速在一堆字符图标中找到所需

    m_Orchestrate learning system---十六.如何快速在一堆字符图标中找到所需 一.总结 一句话总结:find查找字符 比如说找teacher feedback 的图标,可以多 ...

  7. Defining and using constants from PySide in QML

    Defining and using constants from PySide in QML This PySide tutorial shows you how to define constan ...

  8. Kali linux 2016.2(Rolling)中的Metasploit如何更新与目录结构初步认识

    如何更新MSF 1.Windows平台 方法1: 运行msfupdate.bat 在msfconsole里执行命令svn update 或者 方法2:  2.unix/linux平台 方法1: 运行m ...

  9. (转载)自定义ExpandableListView,实现二级列表效果

    先看效果图: 上图是我们要实现的效果,那么现在我们开始着手去做,主要分为以下几步: 一丶我们需要根据效果图去思考该如何动手,从上图分析看,我们可以用一个相对布局RelativeLayout来完成gro ...

  10. springmvc两种非注解的处理器适配器

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...