android学习笔记Fragment的使用
Fragment的内容感觉好多啊,主要需要掌握Fragment静态加载,Fragment动态加载,Fragment的生命周期,Fragment与Activity的交互
1,Fragment的静态加载
在activity的layout文件中声明Fragment,需要特别注意的是《fragment》中的android:name属性指定了在laytout中实例化的Fragemnt类
标示Fragment的方法
android:id 属性提供唯一的id
android:name 属性提供唯一的name
Fragment静态加载比较简单,可以当成普通的控件直接写在activity的布局中,
<LinearLayout
android:id="@+id/frame"
android:orientation="vertical"
android:layout_weight="0.8"
android:layout_width="match_parent"
android:layout_height="0dp"> <fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.lining.myapplication.MyFragment"
android:id="@+id/fragment1">
</fragment> </LinearLayout>
然后需要写一个类继承自Fragment,实现里面的onCreateView方法。该方法中加载自定义的MyFragment布局文件。如下方式
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//return super.onCreateView(inflater, container, savedInstanceState);\
/*
把layout布局文件转换成view
resource:要加载的布局文件
container:加载layout的viewgroup
attachToRoot:false 不返回viewgroup
*/
View view = inflater.inflate(R.layout.fragment1,container,false);
return view;
}
}
当然肯定还得有Fragment的布局,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/fragment1text" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/fragment1btn" /> </LinearLayout>
上面的代码,一个静态加载就可以暂时完成了。
2,动态加载
拽写代码将fragment添加到activity中。add() :添加一个fragment(指定要添加的fragemnt和要插入的view)于此类似的还有remove 和 替换 replace。
处理fragment事务:根据用户的交互情况,对fragemnt进行添加,移除,替换以及执行其他动作,提交给activity的每一套动作成为一个事务
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManaget.beginTransaction();
每一套事务都是同时执行一套变化,可以在一套事务中设置你所有想执行的变化。包括add(),replace,remove 然后提交给activity 。必须调用commit()方法
如果允许用户通过back键返回到前一个fragment调用commit之前可以加入addtobackstack方法
myFragment2 = new MyFragment2();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.add(R.id.frame,myFragment2);
beginTransaction.addToBackStack(null);
beginTransaction.commit();
R.id.frame 就是fragment的父view。
3,Fragment的生命周期
开启应用:onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume
隐藏应用:onPause->onStop
恢复应用:onStart->onResume
切换其他Fragment:onPause->onStop->onDestroyView
返回该Fragment:onCreateView->onActivityCreated->onStart->onResume
退出应用:onPause->onStop->onDestroyView->onDestroy->onDeAttach

4,Fragment与Activity交互
Activity->Fragment : 这个只需要在activity中保存fragment的引用,就可以直接调用fragment的方法,进行传值等等。如果没有保存fragment的引用,那么
就需要通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。
Fragment->Activity : 在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。
public class MyFragment2 extends Fragment implements View.OnClickListener{
private TextView textView;
private Button btn;
private MyListening myListening;
public interface MyListening
{
void thank(String str);
}
@Override
public void onAttach(Activity activity) {
myListening = (MyListening)activity;
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//return super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment1,container,false);
btn = (Button)view.findViewById(R.id.fragment1btn);
btn.setOnClickListener(this);
textView =(TextView) view.findViewById(R.id.fragment1text);
return view;
}
public void setText(String name){
textView.setText(name);
}
@Override
public void onClick(View v) {
myListening.thank("i am fragment");
}
}
然后在Acitvity中实现该接口就行。
@Override
public void thank(String str) { Toast.makeText(getBaseContext(),str,Toast.LENGTH_LONG).show();
}
android学习笔记Fragment的使用的更多相关文章
- [Android学习笔记]Fragment使用
一.android.app.Fragment 与 android.support.v4.app.Fragment 区别 support.v4.app.Fragment是为了给低版本Android使用的 ...
- Android学习笔记- Fragment实例 底部导航栏的实现
1.要实现的效果图以及工程目录结构: 先看看效果图吧: 接着看看我们的工程的目录结构: 2.实现流程: Step 1:写下底部选项的一些资源文件 我们从图上可以看到,我们底部的每一项点击的时候都有不同 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器
目录(?)[-] Transaction的一些操作 再谈FragmentManager 调用其他fragment的方法 唤起activity 唤起fragment和相互通信 一些其它 Transact ...
- 【转】 Pro Android学习笔记(四一):Fragment(6):数据保留
目录(?)[-] 通过fragment参数实现数据保留 对TitleFragment进行修改 对DetailActivity进行修改 通过savedInstanceState进行数据保留 保留frag ...
- 【转】 Pro Android学习笔记(三九):Fragment(4):基础小例子-续
目录(?)[-] Step 3实现简介显示类DetailFragment 创建实例 编写所需的生命周期代码 Step 4实现showDetailint index如何管理fragment fragme ...
- 【转】 Pro Android学习笔记(三八):Fragment(3):基础小例子-续
目录(?)[-] Step 2实现Fragment指定调用类TitleFragment onInflate和onAttach onCreate和onCreateView onActivityCreat ...
- 【转】 Pro Android学习笔记(三七):Fragment(2):基础小例子
目录(?)[-] 小例子运行效果 Pre-step一点准备 Step 1Activity的布局 小例子运行效果 这是一个书名和书简介的例子.运行如下图.Activity由左右两个Fragment组成, ...
随机推荐
- 排序算法总结及Java实现
1. 整体介绍 分类 排序大的分类可以分为两种,内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.主要需要理解的都是内排序算法: 内排序可以分为 ...
- Java程序设计模式系列之适配器模式
理解适配器设计模式需要从生活中的场景进行联系,在生活当中有那些东西能够称为适配器呢?从字面上理解,"适配"的意思就是让一个东西和另一个东西配对,能够让他们一起工作,比如大家用的笔记 ...
- LinkedList原理及源码解析
简介 LinkedList是一个双向线性链表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度, ...
- Pycharm直接连接Github
Pycharm可以说是使用Python语言开发者的必备利器.高校学生有学生邮箱就可以免费使用,着实省了我不少银两.附个license图: Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很 ...
- String详细学习
学这些东西,就像是扎马步.小说里郭靖学不会招数,就会扎马步.搞JS,内力还是必须要深厚,深厚,深厚. 1,stringObject.slice(start,end) slice() 方法可提取字符串的 ...
- 小解系列-自关联对象.Net MVC中 json序列化循环引用问题
自关联对象在实际开发中用的还是比较多,例如常见的树形菜单.本文是自己实际的一个小测试,可以解决循环引用对象的json序列化问题,文笔不好请多见谅,如有错误请指出,希望有更好的解决方案,一起进步. 构造 ...
- Java之分支和循环
Java中的分支语句: if语句: if语句的四种写法: (1) if(表达式_布尔值) { ... } (2) if(表达式_布尔值) { ... } else { ... } (3) if(表达式 ...
- Oracle的over子函数的妙用
摘要 oracle的over 子函数可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序,其中PARTITION BY 为分组字段,ORDER BY 指定排序字段这对统计分析这类问题意想不到的 ...
- Linux 下搭建www服务器
偶然的机会接触了前端开发,尽管最初的意愿是后台. 不过现在看来,前端后台数据库密不可分! 回想起来感觉自己学习的层次也还很好,因为之前有学习c语言.c++的基础,所以在学习html,js的过程中感觉还 ...
- HDU 5547 Sudoku(DFS)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5547 题目: Sudoku Time Limit: 3000/1000 MS (Java/Others ...