02.CriminalIntent应用开发阶段总结

一、在上篇文章中,我们跟随本书作者,使用了单个的Fragment做了最简单的插入操作。本篇文章将跟随作者进行更深入的完善各种功能。

本章目标:

  1. 使用ListFragment显示列表

  2. fragment之间传递数据

  3. 使用ViewPager来实现划屏显示 对话框

二、使用ListFragment显示列表

以达到如下的效果:

1.资源相关

在这个UI中所有的数据都是根据动态数据显示的,因为没有用到任何图片资源或者字符串资源。所以没有修改的地方。

2.数据相关

 现在需要显示一串数据,书中新增了一个可以容纳多个Crime对象ArrayList类。它定义了2个私有变量

               private static CrimeLab sCrimeLab;

               private Context mAppContext;

s开头的变量是开发的命名约定。它代表了变量sCrimeLab是一个静态变量。
这个类的代码现阶段如下:
package com.example.lijing.criminalintent;

import android.content.Context;

/**

  • Created by lijing on 2017/9/18.
    */
    public class CrimeLab {
    private static CrimeLab sCrimeLab;
    private Context mAppContext;

    public CrimeLab(Context appContext) {
    mAppContext = appContext;
    }

    public static CrimeLab get(Context c) {
    if (sCrimeLab == null) {
    sCrimeLab = new CrimeLab(c.getApplicationContext());
    }
    return sCrimeLab;
    }
    }

3.逻辑相关

下图是CriminalIntent应用的整体规划设计

4视图相关
需要在res/layout/list_item_crime.xml中的如下:

5.给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());

完成后界面是这个样子:

6.使用ViewPager来实现划屏显示

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

为ViewPager创建资源ID;

创建ViewPager实例并赋值给mViewPager;

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

设置ViewPager为activity的内容视图。

创建独立资源ID(res/values/ids.xml)

定义独立资源ID与定义字符串资源ID并没有什么不同:在res/values目录下的XML文件中创建一个项目元素。创建一个名为res/values/ids.xml的Android XML 资源文件。

以代码的方式创建内容视图(CrimePagerActivity.java)

mViewPager = new ViewPager(this);

mViewPager.setId(R.id.viewPager);

setContentView(mViewPager);

然后我们使用FragmentStatePagerAdaper为我们的代理,负责管理与ViewPager的对话并协同工作。

7.对话框
在我们CrimeFragment对应的详细信息界面里有一个时间设置按钮。现在我们就按照书中的要求完善这个按钮的对话框。

作者采用将AlertDialog封装在DialogFragment的方法来显示对话框,因为有如下优点:

使用FragmentManager管理对话框,可以使用更多配置选项来显示对话框;

发生旋转时封装在fragment中的AlertDialog不会消失

在屏幕上显示DialogFragment时,托管activity的FragmentManager会调用onCreateDialog()。在onCreateDialog里我们需要返回一个AlertDialog.Builder。

在显示对话框的时候要注意。要将DialogFragment添加给FragmentManager管理并放置到屏幕上,可以调用fragment的show方法。

Public void show (FragmentManager manager, String tag)

Public void show(FragmentTransactiong transaction, String tag)

String参数是用来队列中的DialogFragment。在FragmentManager和FragmentTransaction的选择上,书中选择了FragmentManager因为传入这个参数,事物可以自动创建提交。

最简单的界面效果如下:

posted @ 2017-09-30 16:05  苏式月饼  阅读(145)  评论(0编辑  收藏  举报