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的使用的更多相关文章

  1. [Android学习笔记]Fragment使用

    一.android.app.Fragment 与 android.support.v4.app.Fragment 区别 support.v4.app.Fragment是为了给低版本Android使用的 ...

  2. Android学习笔记- Fragment实例 底部导航栏的实现

    1.要实现的效果图以及工程目录结构: 先看看效果图吧: 接着看看我们的工程的目录结构: 2.实现流程: Step 1:写下底部选项的一些资源文件 我们从图上可以看到,我们底部的每一项点击的时候都有不同 ...

  3. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  4. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

  5. 【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器

    目录(?)[-] Transaction的一些操作 再谈FragmentManager 调用其他fragment的方法 唤起activity 唤起fragment和相互通信 一些其它 Transact ...

  6. 【转】 Pro Android学习笔记(四一):Fragment(6):数据保留

    目录(?)[-] 通过fragment参数实现数据保留 对TitleFragment进行修改 对DetailActivity进行修改 通过savedInstanceState进行数据保留 保留frag ...

  7. 【转】 Pro Android学习笔记(三九):Fragment(4):基础小例子-续

    目录(?)[-] Step 3实现简介显示类DetailFragment 创建实例 编写所需的生命周期代码 Step 4实现showDetailint index如何管理fragment fragme ...

  8. 【转】 Pro Android学习笔记(三八):Fragment(3):基础小例子-续

    目录(?)[-] Step 2实现Fragment指定调用类TitleFragment onInflate和onAttach onCreate和onCreateView onActivityCreat ...

  9. 【转】 Pro Android学习笔记(三七):Fragment(2):基础小例子

    目录(?)[-] 小例子运行效果 Pre-step一点准备 Step 1Activity的布局 小例子运行效果 这是一个书名和书简介的例子.运行如下图.Activity由左右两个Fragment组成, ...

随机推荐

  1. htm5拖放和画布

    拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 首先,为了使元素可拖动,把 draggable 属性设置为 true ondr ...

  2. 利用CSS3新特性实现完全兼容的自定义滚动条。

    背景:最近项目里面因为统一页面风格,用到了自定义滚动条,在完成之前的那个滚动条的时候,与网上各个滚动条插件实现的方法类似,相当于造了轮子,通过css3的 网上看到的滚动条插件多数是通过监听内容的滚动事 ...

  3. CentOS下源码安装vsftpd-3.0.0,并设置指定用户访问指定目录(附带完整配置文件)

    1.卸载系统已经存在的ftp服务器 因为是源码安装,所以不能通过rpm -qa的方式查看是否已经安装ftp服务器,可以通过find / | grep vsftp*方式查看系统中存在哪些与vsftpd相 ...

  4. 在ubuntu14.04上安装mono4.4 + jexus + mvc6

    0.准备工作 在/usr下建立一个文件夹,方便管理源码 cd /usr mkdir opensource cd opensource 安装vim(文本编辑器,不习惯用vim可以换成其他的) apt-g ...

  5. 基于vue2.0的一个豆瓣电影App

    1.搭建项目框架 使用vue-cli 没安装的需要先安装 npm intall -g vue-cli 使用vue-cli生成项目框架 vue init webpack-simple vue-movie ...

  6. 对于所有对象都通用方法的解读(Effective Java 第二章)

    这篇博文主要介绍覆盖Object中的方法要注意的事项以及Comparable.compareTo()方法. 一.谨慎覆盖equals()方法 其实平时很少要用到覆盖equals方法的情况,没有什么特殊 ...

  7. JavaScript图片翻转

    <script type="text/javascript"> /** * 注册函数f,当文档加载问成时执行这个函数f * 如果文件已经载入完成,尽快以异步方式执行它 ...

  8. 虚拟机配置静态IP地址

    使用VMware配置虚拟机静态IP地址 一.安装好虚拟后在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Vmnet8 Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子 ...

  9. java循环、数组练习

    System.out.println("请输入学生个数"); int a=sc.nextInt();//定义一个变量说明学生的数量 int max=0; int[] scores= ...

  10. async 函数

    同步 console.log(1); console.log(2); console.log(3); console.log(4); //异步 ajax 文件读取io操作 console.log(1) ...