本文源自《android权威编程指南第3版》第7章UI fragment与fragment

第7章主要内容是实现一个记录不良行为的APP(部分实现),有列表,有具体的行为内容显示。第7章主要完成单个行为详细信息的UI设置,用以理解fragment初始化的过程。


下面记录一下初始化并加载fragment的一些理解(只粘一些核心代码)

首先,我在主activity的xml文件中引入<FrameLayout>标签,就像一个占位符一样,占好一个空位,id为fragment_container。

<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_container"
></FrameLayout>

主activity的OnCteate方法中是这样初始化的

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); FragmentManager fm = this.getSupportFragmentManager();
Fragment f = fm.findFragmentById(R.id.fragment_container);
if(f == null){
f = new CrimeFragment();
fm.beginTransaction()
.add(R.id.fragment_container, f)
.commit();
}
}

总结起来是这样的:

  1. 获取FragmentManager,是调用Activity.getSupportFragmentManager()的方法获得。
  2. 获得findFragmentById(这个方法等同于activity里的findviewbyid)。
  3. 然后将fragment加入FragmentManager的Transaction中。
  4. 在FragmentManager里以key, fragment的方式类似Map方式保存。

在Fragment的代码里OnCreate实现参数的初始化:

public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.mCrime = new Crime();
}

在OnCreateView方法中实现功能:

        View v = inflater.inflate(R.layout.fragment_crime, container, false);
this.mTitleFiled = (EditText)v.findViewById(R.id.crime_title);
this.mTitleFiled.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
/**
* 文本变化自动填充Crime类
*/
mCrime.setTitle(s.toString());
} @Override
public void afterTextChanged(Editable s) { }
});
this.mDateButton = (Button)v.findViewById(R.id.crime_date);
this.mDateButton.setText(MyDateUtil.getDateStr(mCrime.getDate(), null));
this.mDateButton.setEnabled(false);
this.mSolvedCheckBox = (CheckBox)v.findViewById(R.id.crime_solved);
this.mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
CrimeFragment.this.mCrime.setSolved(isChecked);
}
}); return v;
获得View对象,这里不是Activity,不能直接调用,先获取View对象,再用View对象调用
View v = inflater.inflate(R.layout.fragment_crime, container, false);
然后像在Activity中初始化各个组件及相关Listener
this.mTitleFiled = (EditText)v.findViewById(R.id.crime_title);
this.mTitleFiled.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
/**
* 文本变化自动填充Crime类
*/
mCrime.setTitle(s.toString());
} @Override
public void afterTextChanged(Editable s) { }
});
最后将View返回,供Activity使用。
return v;

[android]p7-1 fragment学习笔记的更多相关文章

  1. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  2. Android(java)学习笔记267:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  3. Android(java)学习笔记207:开源项目使用之gif view

    1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...

  4. Android(java)学习笔记71:生产者和消费者之等待唤醒机制

    1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ...

  5. Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  6. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

  7. Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)

    之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播:   1.   我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...

  8. Android(java)学习笔记206:利用开源SmartImageView优化网易新闻RSS客户端

    1.我们自己编写的SmartImageView会有很多漏洞,但是我们幸运的可以在网上利用开源项目的,开源项目中有很多成熟的代码,比如SmartImageView都编写的很成熟的 国内我们经常用到htt ...

  9. Android(java)学习笔记205:网易新闻RSS客户端应用编写逻辑过程

    1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,bl ...

  10. Android(java)学习笔记204:自定义SmartImageView(继承自ImageView,扩展功能为自动获取网络路径图片)

    1.有时候Android系统配置的UI控件,不能满足我们的需求,Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高. ...

随机推荐

  1. Javascript面试题&知识点汇总

    问题&答案 什么时候 a ==1 && a== 2 && a==3 为 true? var a = { i: 1, toString: function () ...

  2. SpringMVC源码剖析2——处理器映射器

    1.处理器映射器 HandlerMapping 一句话概括作用: 为 我 们 建 立 起 @RequestMapping 注 解 和 控 制 器 方 法 的 对 应 关 系 . 怎么去查看 第一步: ...

  3. Qt QString与string的转换

    QString --> string QString.toStdString();   string --> QString QString::fromStdString(string);

  4. 撰写introduction|引用

    科研论文写作-introduction Introduction主要是写研究的来龙去脉,即该研究的历史,包括以前存在问题及其评价,和现今研究创新点,这样引导读者便于理解,阐述的内容也是由背景.目的.方 ...

  5. unittest(23)- python发邮件

    import smtplib import time from email.mime.multipart import MIMEMultipart from email.mime.text impor ...

  6. Java中Volatile关键字详解 (转自郑州的文武)

    java中volatile关键字的含义:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 一.基本概念 先补充一下概念:J ...

  7. 吴裕雄--天生自然 R语言开发学习:广义线性模型

    #----------------------------------------------# # R in Action (2nd ed): Chapter 13 # # Generalized ...

  8. babel-loader的原理

    本文转载自默语的博客. Babel包的构成 核心包 babel-core:是babel转译器本身,提供转译的API,例如babel.transform等,webpack的babel-loader就是调 ...

  9. Python---12函数式编程------12.2返回函数

    返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ...

  10. ERROR 1176 (42000): Key 'XXX' doesn't exist in table 'XXX'报错处理

    MySQL5.7对sql语句强制使用索引查询时报错如下: 解决:这里的id字段是表的主键,查看别人的经验贴得知是语法错误,参考链接https://stackoverflow.com/questions ...