【Android】19.0 第19章 前面章节的代码优化及本章示例主界面
分类:C#、Android、VS2015;
创建日期:2016-03-05
一、简介
这一章我们介绍“共享存储和内容提供程序”的基本用法。
二、先优化一下前面章节例子的代码
在前面章节的示例中,并没有对每个例子都添加IntentFilter,但是,当你按章节顺序一步一步学到这一章时,你应该已经意识到下面的问题:
(1)让每个例子都接收MainActivity的通知可能不合适,这是因为每个例子都是独立的模块,它和主界面(MainActivity)可能并没有什么直接的联系。
(2)或许你还可能想在你设计的每个页面中都嵌入一个共同的部分,而这个“共同”的部分只需要设计一次即可,就像WPF或者Web中你希望嵌入一个所有页面都公用的某个一次性设计的模板一样,此时就可以用Fragment来实现。
下面分别介绍如何解决这两个问题。
1、问题1的解决办法
解决第(1)个问题的办法很简单,就是在你每个独立模块的主Activity中都加入下面的过滤器特性声明:
[IntentFilter(new[] { Android.Content.Intent.ActionMain }, Categories = new[] { ch.MyDemosCategory })]
具体实现见本章的示例。
其中,ch.MyDemosCategory 是在ch.cs文件中定义的一个常量。
由于数组中的每个常量都是字符串,所以代码中的new[]也可以写为new string[]。
另外,把MainActivity中创建的列表也保存到新添加的ch.cs这个文件中:
using System.Collections.Generic;
namespace MyDemos.SrcDemos
{
public static class ch
{
//给整个项目定义一个完全一致的Intent过滤器分类
public const string MyDemosCategory = "cnblogs.com.rainmj.MyDemos"; public static IList<Chapter> CreateChItems()
{
IList<Chapter> chItems = new List<Chapter>();
chItems.Add(new Chapter()
{
ChapterName = "第1章 开发环境安装和配置",
ChapterItems = new ChItem[]
{
new ChItem {type=null, Title="本章无示例", Desc = "" },
}
});
……(后面的代码不再粘贴了)
}
}
}
这样一来,MainActivity.cs文件中的代码就显得干净整洁了。
从这一章开始,后面章节示例的主界面中所有与MainActivity.cs相关的代码也都将改为在ch.cs文件中添加。
2、问题2的解决办法
前面我们讲过,Android的布局元素和WPF相比,前者的Fragment元素就相当于后者的Frame元素。既然这样,当然也可以单独设计一个页面,然后在需要时将该页面作为一个Fragment来看待,把它嵌入到你希望嵌入的页面中就行了。
下面是MyDemosFragment.axml文件的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:text="www.cnblogs.com/rainmj/"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="14dp"
android:textColor="#FF267F00"
android:textStyle="bold"
android:gravity="center_horizontal"
android:paddingBottom="5dp" />
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="#0000FF"
android:layout_marginBottom="5dp" />
</LinearLayout>
下面是项目根目录下MyDemosFragment.cs文件的代码,该文件相当于MVC中的控制器,用于将MyDemosFragment.axml文件添加到引用它的页面中:
using Android.App;
using Android.OS;
using Android.Views; namespace MyDemos
{
public class MyDemosFragment : Fragment
{
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
} public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.Inflate(Resource.Layout.MyDemosFragment, container, true);
}
}
}
完成上面的工作后,要将MyDemosFragment.axml作为另一个页面的一部分,比如将其作为ch1901Main.axml文件的一部分,只需要在ch1901Main.axml文件中的合适位置中添加下面的代码即可:
<fragment
android:name="MyDemos.MyDemosFragment"
android:tag="mydemos"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
从这一章张开始,后面的所有示例页面都将嵌入这一部分。
另外,Main.axml文件也将相关的部分替换为这段代码了。
三、本章示例主界面
1、运行截图

2、ch.cs文件中与本章示例相关的代码
chItems.Add(new Chapter()
{
ChapterName = "第19章 共享存储和内容提供程序",
ChapterItems = new ChItem[]
{
new ChItem { type=typeof(ch1901MainActivity), Title="例19-1 SharedPreferences基本用法", Desc = "演示SharedPreferences的基本用法" },
new ChItem { type=typeof(ch1902MainActivity), Title="例19-2 ShareActionProvider基本用法", Desc = "演示共享操作提供程序(ShareActionProvider)的基本用法" },
new ChItem { type=typeof(ch1903MainActivity), Title="例19-3 ContentProvider基本用法", Desc = "演示内容提供程序(ContentProvider)及其相关类的基本用法" },
}
});
【Android】19.0 第19章 前面章节的代码优化及本章示例主界面的更多相关文章
- 【Android】7.0 第7章 简单适配器和布局--本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-09 修改日期:2016-02-13 一.在AssemblyInfo.cs文件中配置应用程序清单 前面的章节我们说过,除了在And ...
- 【Android】15.0 第15章 广播和通知—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-28 一.简介 广播(Broadcast):其功能类似于收音机的广播,你只要调到那个台(只要在接收的类中注册了要接收的广播),就能 ...
- 【Android】13.0 第13章 创建和访问SQLite数据库—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 Android 内置了三种数据存取方式:SQLite数据库.文件.SharedPreferences. 这一章我们 ...
- 【Android】17.0 第17章 服务绑定—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-03 一.简介 通过服务绑定(Bound Services),可以轻松实现后台服务与界面(UI)的交互. 二.本章示例主界面 1. ...
- 【Android】12.0 第12章 Intent及其过滤器—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 这一章我们主要学习Intent的基本用法,并通过例子演示如下功能: 如何启动另一个界面: 如何获取另一个界面的返回 ...
- 【Android】11.0 第11章 活动和片段--本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 这一章我们学习activity和fragment,深入理解activity和fragment的生命周期是如何工作的 ...
- 【Android】16.0 第16章 自定义服务和系统服务—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-01 一.简介 本章主要演示Started Service.带Intent过滤器的Started Service.IntentSe ...
- 【Android】14.0 第14章 内部存储与外部SD卡存储—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 Android使用的文件系统是基于Linux的文件系统,在Android应用程序中,开发人员既可以建立和访问程序自 ...
- 【Android】第18章 位置服务和手机定位—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-04 一.简介 目前,基于位置的服务发展迅速,已涉及到商务.医疗.定位.追踪.敏感区域警告.工作和生活等各个方面.定位服务融合了G ...
随机推荐
- linux驱动杂项
linux驱动 结构体中的逗号 http://zhouyang340.blog.163.com/blog/static/3024095920123495051607/ 下面我们看一个例子,Linux- ...
- PHP高级教程-文件
PHP 文件处理 fopen() 函数用于在 PHP 中打开文件. 打开文件 fopen() 函数用于在 PHP 中打开文件. 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来 ...
- 小程序target与currentTarge区别
文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- mysql 创建表单
1.表名:Customer 属性: ID 字符型 最大10个字符 ——顾客编号 NAME 字符型 最大16个字符 ——顾客姓名 SEX 字符型 最大2个字符 ——性别 ...
- vue 渲染流程
1.DOM 节点树 高效的更新所有这些节点会是比较困难的,因为原生的DOM节点属性很多,渲染性能差. 2.虚拟 DOM “虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode 树的称呼. ...
- margin赋值为负值的几种效果(负值像素,负值百分数)
1.margin-top为负值像素 margin-top为负值像素,偏移值相对于自身,其后元素受影响,见如下代码: <!DOCTYPE html> <html lang=" ...
- 解决itextpdf行高问题
解法:PdfPCell.setFixedHeight(value);
- BZOJ 1040 ZJOI 2008 骑士 基环树林+树形DP
题目大意:有一些骑士.他们每个人都有一个权值.可是因为一些问题,每个骑士都特别讨厌还有一个骑士.所以不能把他们安排在一起.求这些骑士所组成的编队的最大权值和是多少. 思路:首先貌似是有向图的样子,可是 ...
- JAVA虚拟机内存架构
Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随 ...
- 在Eclipse中开发C/C++项目
摘要:通过本文你将获得如何在Eclipse平台上开发C/C++项目的总体认识.虽然Eclipse主要被用来开发Java项目,但它的框架使得它很容易实现对其他开发语言的支持.在这篇文章里,你将学会如何使 ...