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应用的整体规划设计
1234992-20170930160305794-1589724894.png

4视图相关
需要在res/layout/list_item_crime.xml中的如下:
1234992-20170930160350153-802616858.png

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());

完成后界面是这个样子:
1234992-20170930160406809-2027630917.png

6.使用ViewPager来实现划屏显示
1234992-20170930160448934-182977743.png

为了实现这个效果,我们需要创建一个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因为传入这个参数,事物可以自动创建提交。

最简单的界面效果如下:
1234992-20170930160507544-499150718.png

转载于:https://www.cnblogs.com/gjy1/p/7615339.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值