Android学习之基础知识七—碎片的最佳实践
一、Android碎片(Fragment)的最佳实践——简易版新闻应用
第一步:新建FragmentBestPractice项目,在app/build.gradle当中添加:RecyclerView 依赖库,注意:添加完成后,一定要记住点击右上角的:Sync now

第二步:创建新闻实体类

第三步:创建新闻内容的布局文件:news_content_frag.xml
新闻内容布局主要分为两个部分:头部显示新闻标题、正文显示新闻内容,中间用一条细线分隔开,细线利用View来实现,通过background属性设置一下颜色就行了

第四步:创建新闻内容的碎片:NewsContentFragment类,继承Fragment,注意:这里继承的Fragment不是系统自带的Fragment,而是:android.support.v4.app.Fragment

上面我们已经把新闻内容的碎片和布局创建好了,但是它们都是在双页模式中使用的,如果是单页模式中使用的话,我们还需要再创建一个新闻内容的活动:NewsContentActivity,并指定对应的布局文件名为:news_content.xml
第五步:在news_content.xml中直接引入NewsContentFragment碎片,新闻内容的布局:news_content_frag.xml也自动加载了进来。

第六步:在NewsContentActivity中显示新闻标题和内容

第七步:创建新闻的标题列表布局:news_title_frag.xml,在这个列表中由于只有标题,所以使用RecyclerView控件

第八步:使用RecyclerView控件就必须要有子项布局,即:标题列表中一个标题的布局:news_item.xml. 标题使用TextView表示就行了
android:padding 给控件周围补白,这样不至于让文本内容会紧贴在边缘上
android:singleLine 设置为true表示让这个TextView只能单行显示
android:ellipsize 用于设定文本的内容超出控件宽度时,文本的缩略方式。这里表示在尾部进行缩略。

第九步:新闻的标题列表和子项布局创建完成后,创建标题碎片:newsTitleFragment

为了让news_content_layout只在双页模式中出现,可以借助我们刚刚学过的限定词来实现
第十步:修改activity_main.xml,用于单页模式下,会加载新闻标题列表一个碎片

第十一步:在res目录下,新建layout-sw600dp文件夹,在该文件夹下再建一个activity_main.xml,并在其中指定一个id:news_content_layout,用于双页模式下,加载两个碎片:新闻标题列表、新闻内容
新闻内容放在了一个FragmentLayout布局中,并且id就为:news_content_layout

第十二步:在NewsTitleFragment中新建一个内部类:NewsAdapter 作为RecyclerView的适配器,用来将新闻列表展示出来


第十三步:最后一步,向RecyclerView中填充数据,修改NewsTitleFragment中的代码

第十四步:运行程序
在手机上运行程序,只会显示新闻的标题列表(左),可以上下滑动屏幕,点击任意标题,切换到新闻内容的活动界面(右)

在PAD上面运行程序,新闻标题列表和新闻内容都在一个界面显示出来

二、总结思路
在手机上运行,先显示出一个新闻的标题列表,通过点击标题跳转页面,显示出新闻的内容
在PAD上运行,同时显示出新闻标题列表和新闻内容
Android学习之基础知识七—碎片的最佳实践的更多相关文章
- Android学习之基础知识七—碎片的使用
碎片(Fragment)是一种可以嵌入在活动中的UI片断,它能让程序更加合理和充分地利用大屏幕的空间,它与活动相似,可以简单的理解为一个迷你型的活动,它也有自己的生命周期.碎片在平板的应用非常广泛. ...
- Android学习之基础知识十三 — 四大组件之服务详解第一讲
一.服务是什么 服务(Service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使程序被切换到后台, ...
- Android学习之基础知识十六 — Android开发高级技巧的掌握
一.全局获取Context的技巧 前面我们很多地方都使用到了Context,弹出Toast的时候.启动活动的时候.发送广播的时候.操作数据库的时候.使用通知的时候等等.或许目前来说我们并没有为得不到C ...
- Android学习之基础知识十五 — 最佳UI体验(Material Design实战)
一.前言 长久以来,大多数人都认为Android系统的UI并不美观,至少没有iOS系统的美观.以至于很多IT公司在进行应用界面设计的时候,为了保证双平台的统一性,强制要求Android端的界面风格必须 ...
- Android学习之基础知识十—内容提供器(Content Provider)
一.跨程序共享数据——内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能 ...
- Android学习之基础知识十四 — Android特色开发之基于位置的服务
一.基于位置的服务简介 LBS:基于位置的服务.随着移动互联网的兴起,这个技术在最近的几年里十分火爆.其实它本身并不是什么时髦的技术,主要的工作原理就是利用无线电通讯网络或GPS等定位方式来确定出移动 ...
- Android学习之基础知识十一 —运用手机多媒体
一.使用通知(Notification) 通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助 ...
- Android学习之基础知识十二 — 第一讲:网络技术的使用
这一节主要讲如何在手机端使用HTTP协议和服务器端进行网络交互,并对服务器返回的数据进行解析,这也是Android中最常用的网络技术. 一.WebView的用法 有时候我们可能会碰到比较特殊的需求,比 ...
- Android学习之基础知识五—Android常用的七大控件
一.TextView控件:在界面上显示一段文本信息 先看XML代码和执行效果: 代码分析: 1.android:id属性,给当前控件定义了一个唯一的标识符 2.android:layo ...
随机推荐
- canvas-star1.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js小知识
1.重新声明js变量,变量值不丢失 2.background-color 使用jquery获取样式中的background-color的值时发现在获取到的颜色值在IE中与Chrome.Firefox显 ...
- video自动禁止全屏
在微信浏览器.苹果等其他浏览器,里面使用video标签,会自动变成全屏,改成下面就好了,起码可以在video标签之上加入其他元素 webkit-playsinline playsinline x ...
- Salesforce中的单点登录简介
单点登录的定义 引自维基百科: 单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性.当拥有这项属性时, ...
- Android 时间与日期操作类
获取本地日期与时间 public String getCalendar() { @SuppressLint("SimpleDateFormat") SimpleDateFormat ...
- 不使用JS实现表单验证
我们可以给表单元素添加required,pattern属性,还有根据具体元素类型决定的Measureable属性,如:min,max等. required:表示必填. pattern:一般用于type ...
- [SQL SERVER] The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server, Error: 15128)
The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsof ...
- Node.js中文乱码解决方法
- sysfs_create_group创建sysfs接口
在调试驱动,可能需要对驱动里的某些变量进行读写,或函数调用.可通过sysfs接口创建驱动对应的属性,使得可以在用户空间通过sysfs接口的show和store函数与硬件交互: Syss接口可通过sys ...
- python 报错RuntimeError: dictionary changed size during iteration
a = {':0} for b in list(a.keys()): if a[b] == 0: del a[b] print(a) 报错是因为在字典迭代期间改变字典大小 我们可以通过取出字典的键值, ...