美文网首页
CriminalIntent开发(一)

CriminalIntent开发(一)

作者: 木榆_1a1b | 来源:发表于2017-09-27 16:08 被阅读0次

    项目介绍

    项目整体构架

    这个应用是在容器视图中显示列表。我们要创建一个ListFragment和一个Activity,还有与ListFragment相匹配的layout。

    Fragment

    创建CrimeListFragment类扩展自ListFragment。HoneyComb系统版本引入了ListFragment类,相应的,支持库也引入了该类。

    import android.support.v4.app.ListFragment;

    ListFragment是通过ListView将列表项展示给用户。而ListView通过adapter来申请视图对象。

    Adapter负责:

    创建必要的视图对象;

    用模型层数据填充视图对象;

    将准备好的视图对象返回给ListView。

    随意例子中采用了setListAdapter(ListAdapter)来为CrimeListFragment管理内置ListView设置adapter。(详情参看后面的代码链接,现在就可以打开它对比观看)

    FragmentActivity

    由于每一个ActivityFragment都有相似的代码,于是作者创建了一个SingleFragmentActivity抽象类用来减少以后的代码输入。在书中的例子都是在一个FragmentContainer动态添加一个Fragment,所以唯一不同的代码就是在事物添加Fragment之前动态创建的代码。

    修改CrimeActivity扩展自SingleFragmentActivity。

    创建CrimeListActivity扩展自SingleFramentActivity。

    部分:

    Crime                          列表子元素的对象

    CrimeLab                可以创建和获取一个Crime 列表。

    Activity

    CrimeListActivity            扩展自SingleFragmentActivity 创建CrimeListFragment 事物

    SingleFragmentActivity

    Fragment

    CrimeListFragment            根据list_item_crime.xml 生成相应的View

    Res/layout

    Activity_fragment.xml        定义了容易视图

    List_item_crime.xml        定义了列表子元素的视图

    应用功能介绍:CriminalIntent这个应用可以详细的记录各种陋习,其中包括了标题、日期和照片,支持在联系人中查找当事人

    UI fragment与fragment管理器

    模型层

    crime类以及生成的getter与setter方法

    托管UI fragmen

    CriminalActivity类的fragment托管布局

    CrimeFragment布局以及类的创建

    RecyclerView显示列表

    应用模型层将新增一个CrimeLab对象,而且显示列表需要在应用控制器层新增一个activity和一个fragment

    有了RecycleView的创建避免了很多繁琐的创建,创建的时候刚好创建12个,用户下滑的时候上一个视图会回收利用,它的作用就是回收再利用,循环往复

    ViewHolder和Adapter

    RecycleView自身不会创建视图,它创建的是ViewHolder,而ViewHolder引用着itemView              Adapter负责创建和绑定

    ConstraintLayout

    给CrimeFragment填充数据

    使用之前学到的方法用Intent传递数据,在CrimeFragment的onCreate()中从Intent读取数据。

    首先定义一个id

    public static final String EXTRA_CRIME_ID =

    "com.example.lijing.criminalintent.crime_id";

    …..

    然后在onCreate()中

    UUID crimeId = (UUID)getActivity().getIntent().getSerializableExtra(EXTRA_CRIME_ID);

    mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);

    数据在CrimeListFragment中startActivity()之

    putExtra(CrimeFragment.EXTRA_CRIME_ID,c.getId());

    修改好的布局

    约束的XML形式

    界面之间传递数据的改进

    原先的代码如下

    UUID crimeId = (UUID)getActivity().getIntent().getSerializableExtra(EXTRA_CRIME_ID);

    在这段代码中crimeId是存储在CrimeActivity中的。现在将它由CrimeActivity的intent内的extra改为arguments bundle。每个fragment实例都可以附带一个Bundle对象。该bundle包含有key-value对,我们可以如同附加extra到Activity的intent中那样使用它们。一个key-value对即一个argument。

    UUID crimeId = (UUID)getArguments().getSerializable(EXTRA_CRIME_ID);

    并给fragment一个newInstance()来创建自己,并在这个静态方法里创建arguments。

    总的来说就是由以前从Activity中获取参数,改成从自己的存储区里获取参数。而自己的存储区里的参数是在创建该fragment是写入的。

    使用fragment argument

    使用ViewPager

    大体布局

    为了实现向左滑向右滑的这种效果,我们需要创建一个ViewPager的activity,命名为CrimePagerActivity来取代CrimeActivity。本章采用了以代码的方式创建视图它包含以下步骤:

    为ViewPager创建资源ID;

    创建ViewPager实例并赋值给mViewPager;

    赋值资源ID给ViewPager,并对其进行配置;

    设置ViewPager为activity的内容视图。


    相关文章

      网友评论

          本文标题:CriminalIntent开发(一)

          本文链接:https://www.haomeiwen.com/subject/dfjuextx.html