通常,一个活动可能包含一个或多个协同工作的Fragment以向用户展现一致的UI。在这种情况下,Fragment之间就需要彼此通信并交换数据,这是非常重要的。例如,一个Fragment可能包含了一个条目列表(如来自一个RSS提要的帖子)。当用户轻点Fragment上的某个条目时,所选条目的详细信息可能会显示在另一个Fragment上。
下面的“试一试”介绍了一个Fragment如何访问另一个Fragment中的视图。

(1) 使用上一节创建的项目,向Fragment1.xml文件中添加如下所示的粗体代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3.    xmlns:android="http://schemas.android.com/apk/res/android"
  4.    android:orientation="vertical"
  5.    android:layout_width="fill_parent"
  6.    android:layout_height="fill_parent"
  7.    android:background="#00FF00"
  8.    >
  9. <TextView
  10.    android:id="@+id/lblFragment1"
  11.    android:layout_width="fill_parent"
  12.    android:layout_height="wrap_content"
  13.    android:text="This is fragment #1" />
  14. </LinearLayout>
(2) 向fragment2.xml文件中添加如下所示的粗体代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3.    xmlns:android="http://schemas.android.com/apk/res/android"
  4.    android:orientation="vertical"
  5.    android:layout_width="fill_parent"
  6.    android:layout_height="fill_parent"
  7.    android:background="#FFFE00"
  8.    >
  9. <TextView
  10.    android:layout_width="fill_parent"
  11.    android:layout_height="wrap_content"
  12.    android:text="This is fragment #2" />
  13. <Button android:id="@+id/btnGetText"
  14.      android:layout_width="wrap_content"
  15.      android:layout_height="wrap_content"
  16.      android:text="Get text in Fragment #1" />
  17. </LinearLayout>
(3) 修改MainActivity.java文件,将前几节添加的代码注释掉。修改后的代码如下所示:

  1. package net.learn2develop.Fragments;
  2. import net.learn2develop.Fragments.R;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. public class MainActivity extends Activity {
  6.    /** Called when the activity is first created. */
  7.    @Override
  8.    public void onCreate(Bundle savedInstanceState) {
  9.      super.onCreate(savedInstanceState);
  10.      setContentView(R.layout.main);
  11.    }
  12. }
(4) 向Fragment2.java文件中添加如下所示的粗体代码:

  1. package net.learn2develop.Fragments;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.Button;
  8. import android.widget.TextView;
  9. import android.widget.Toast;
  10. public class Fragment2 extends Fragment {
  11.    @Override
  12.    public View onCreateView(LayoutInflater inflater,
  13.    ViewGroup container, Bundle savedInstanceState) {
  14.      // Inflate the layout for this fragment
  15.      return Inflater.inflate(R.layout.fragment2,
  16.         container, false);
  17.    }
  18.    
  19.    @Override
  20.    public void onStart() {
  21.      super.onStart();
  22.      //---Button view---
  23.      Button btnGetText = (Button)
  24.        getActivity().findViewById(R.id.btnGetText);
  25.      btnGetText.setOnClickListener(new View.OnClickListener() {
  26.        public void onClick(View v) {
  27.          TextView lbl = (TextView)
  28.            getActivity().findViewById(R.id.lblFragment1);
  29.          Toast.makeText(getActivity(), lbl.getText(),
  30.            Toast.LENGTH_SHORT).show();
  31.        }
  32.      });
  33.    }
  34. }
(5) 将这两个Fragment放到main.xml中:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3.    xmlns:android="http://schemas.android.com/apk/res/android"
  4.    android:orientation="horizontal"
  5.    android:layout_width="match_parent"
  6.    android:layout_height="match_parent">
  7.    <fragment
  8.      android:name="net.learn2develop.Fragments.Fragment1"
  9.      android:id="@+id/fragment1"
  10.      android:layout_weight="1"
  11.      android:layout_width="0px"
  12.      android:layout_height="match_parent" />
  13.    <fragment
  14.      android:name="net.learn2develop.Fragments.Fragment2"
  15.      android:id="@+id/fragment2"
  16.      android:layout_weight="1"
  17.      android:layout_width="0px"
  18.      android:layout_height="match_parent" />
  19. </LinearLayout>
(6) 按下F11键在Android模拟器上调试应用。在右边第2个Fragment中单击按钮,将会看到Toast类显示出文本This is fragment #1(如图2-13所示)。

示例说明

由于Fragment被嵌入到了活动中,因此可以通过getActivity()方法获取Fragment当前所嵌入到的活动,然后使用findViewById()方法找到Fragment中包含的视图:

  1.  TextView lbl = (TextView)
  2.        getActivity().findViewById(R.id.lblFragment1);
  3.      Toast.makeText(getActivity(), lbl.getText(),
  4.  Toast.LENGTH_SHORT).show();

Fragment之间的交互的更多相关文章

  1. 安卓任意两个或多个Fragment之间的交互与刷新界面

    平时项目中遇到一个问题:在子fragment中刷新父fragment的界面,通俗的说也就是在任何一个fragment中来刷新另一个fragment.大家都知道activity和fragment之间的交 ...

  2. Fragments之间的交互(实现参数传递)

    Fragments之间的交互(实现参数传递) 日常开发中,通常Fragments之间可能需要交互,比如基于用户事件改变Fragment的内容.所有Fragment之间的交互需要通过他们关联的Activ ...

  3. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  4. Android中使用开源框架EventBus3.0实现Fragment之间的通信交互

    1.概述 在之前的博文中简单介绍过如何实现fragment之间的信息交互:<Android中Fragment与Activity之间的交互(两种实现方式)>,今天继续给大家介绍一种可以实现此 ...

  5. fragment之间的信息交互——onActivityResult()不经过Activity

    1.本文讲述如何fragment与fragment之间互传信息,不用使用Activity的onActivityResult()方法 核心思想:FirstFragment获取到SecondFragmen ...

  6. Android学习路径(23)应用Fragment建立动态UI——Fragment之间的通信

    为了要重用Fragment的UI组件.你应该为它们每个都构建一个完整独立的,模块化的组件来定义他自身的布局和行为. 一旦你定义了这些可重用的Fragments.你能够通过activity关联它们同一时 ...

  7. Android基础——Fragment与Activity交互

    今天继续讲解Fragment组件的特性,主要是跟Activity的交互和生命周期的关系,我们前面已经说过Fragment是依赖于Activity的,而且生命周期也跟Activity绑定一起.下面我们看 ...

  8. 我的Android第五章:通过Intent实现活动与活动之间的交互

    Intent在活动的操作 作用: Itent是Android程序中各个组件直接交换的一个重要方式可以指定当前组件要执行任务同时也可以给各个组件直接进行数据交互              同时Inten ...

  9. Fragment之间的通信(四)

    自定义两个fragment的布局和java类. 在mainactivity中引用布局文件 在其中的一个fragment中的控件上添加监听,获取到另一个fragment中控件的内容,展示出来完成frag ...

随机推荐

  1. qt mysql驱动问题解绝

    传统解决方法:一.解决问题 本文解决在Ubuntu16.04系统下,Qt5无法连接MySQL数据库的问题(Qt5缺少MySQL驱动,Qt5缺少libqsqlmysql.so动态库,如何安装libqsq ...

  2. 集合框架—常见的Set集合

    list ArrayList 动态数组结构存储,遍历速度快,索引随机访问快,允许多空值 LinkedList 底层数据结构是链表,插入和删除速度快. Vector 数组结构存储,线程安全的,查找速度快 ...

  3. HDU 2235

    这题说的是给了一个 平面 然后又很多的长方体柱子 问这个 容器的 容积是什么, 排序后 然后 进行 并查集 判断是否 可以有比他小的高度依靠他算体积,通过并查集去判断他的子集的个数. #include ...

  4. pbs 作业管理命令

    PBS 提供4 条命令用于作业管理. (1) qsub 命令—用于提交作业脚本 命令格式: qsub [-a date_time] [-c interval] [-C directive_prefix ...

  5. MySQL Crash Course #16# Chapter 24. Using Cursors + mysql 循环

    mysql中游标的使用案例详解(学习笔记)这篇讲得相当直白好懂了. 索引: cursor 基础讲解 mysql 循环 书上的整合代码 cursor 基础讲解 cursor 有点类似于 JDBC 中的 ...

  6. Python入门之面向对象的多态

    本章目录: 一.多态 二.多态性 三.鸭子类型 ============================== 一.多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪. import ab ...

  7. Nodejs 实现 WebSocket 太容易了吧!!

    我们基于express和socket.io开发,首先我们需要安装以下包 npm install --save express npm install --save socket.io 服务器端代码: ...

  8. 上周日选拔题部分write up

    ---恢复内容开始--- 第一题.平淡无奇的签到题,“百度一下,你就知道”,打开之后会弹出一个百度的网页页面.网页题第一步,先查看它的源代码.从上往下看,发现了这样一行字 看起来有点像base编码,于 ...

  9. linux内核分析 第5章读书笔记

    第五章 系统调用 一.与内核通信 系统调用在用户控件进程和硬件设备之间添加了一个中间层,作用有: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用 ...

  10. 安装Qt5.9

    目前,作为一个重量级编程开发工具,Qt 已经正式发布了 5.9.0 版本.相比之前的 5.7,5.8 版本,新版本在性能和功能上有了大幅改善和提高,并由此获得了官方的明确表态:这将是继 5.6 之后的 ...