这个简单的实例实现Fragment1向Fragment2传值的功能

首先编写两个fragment的布局文件:

Fragment1中使用一个EditText用于输入待发送至Fragment2中的信息,使用一个Button,点击后将EditText中的信息传输给Fragment2,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#96CDCD"android:padding="20dp"><EditTextandroid:id="@+id/edt1"android:singleLine="true"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="@string/hint"android:padding="10dp"android:textColor="#6A5ACD"android:textColorHint="#6A5ACD"android:textSize="30sp" /><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/edt1"android:layout_marginTop="10dp"android:text="@string/send1"android:textAllCaps="false"android:textColor="#708090"android:textSize="45sp" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/btn1"android:layout_marginTop="15dp"android:gravity="center"android:text="@string/banner_f1"android:textColor="#6A5ACD"android:textSize="50sp" /></RelativeLayout>

Fragment2中使用一个TextView用于接受Fragment1处传来的信息,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#F5F5DC"android:padding="20dp"><TextViewandroid:id="@+id/tv2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="30dp"android:background="@drawable/textview"android:padding="15dp"android:textSize="30sp" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/tv2"android:layout_marginTop="30dp"android:gravity="center"android:text="@string/banner_f2"android:textAllCaps="false"android:textColor=" #CD5555"android:textSize="50sp" /></RelativeLayout>

在activity_main中将两个fragment加入进来,注意设置<fragment/>的name属性,这是在主Activity布局中嵌入两个fragment布局的关键,这里要注意将两个Fragment的.java文件和MainActivity文件放到同一目录下

接下来开始编写java文件,这里传输信息使用第三方的EventBus来实现,首先我们要将EventBus添加到我们的工程中:

File → Project Structure → app → Dependencies

点击右上角绿色的“+”号在输入框中输入EventBus后点击搜索(可能需要等待一会儿),找到如图所示的eventbus后按ok即可。

接下来我们开始正式编写Java代码。

首先我们来看一下逻辑相对简单的Fragment2.java,因为Fragment2是接收消息的一方,所以使用

 EventBus.getDefault().register(this);

这行语句将Fragment2类型的对象注册为接受方,再编写一个setData(String)函数,传入一个String,将其显示到fragment2的TextView中。这样Fragment2.java的关键部分就算结束了。

package com.example.a59129.twofragments;import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;public class Fragment2 extends Fragment {private TextView tv2;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = View.inflate(getActivity(), R.layout.fragment2, null);EventBus.getDefault().register(this);tv2 = view.findViewById(R.id.tv2);return view;} //onCreateView()@Subscribepublic void setData(String string) {tv2.setText(string);} //setData()@Overridepublic void onDestroy() {super.onDestroy();EventBus.getDefault().unregister(this);} //onDestroy()} //class

之后再来看一下Fragment1.java,我们在Fragment1.java中使用post()方法将EditText中的信息取出后并上传(可以这么理解吧),然后写一个用于数据传输的接口,这个接口将在MainActivity中实现

package com.example.a59129.twofragments;import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;import org.greenrobot.eventbus.EventBus;public class Fragment1 extends Fragment {private EditText edt1;private Button btn1;private OnDataTransmissionListener mListener;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = View.inflate(getActivity(), R.layout.fragment1, null);edt1 = view.findViewById(R.id.edt1);btn1 = view.findViewById(R.id.btn1);btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//从fragment1的EditText中获取输入的信息,并提交EventBus.getDefault().post(edt1.getText().toString());//隐藏键盘,防止键盘遮挡fragment2的显示区InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm.isActive()) {imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0);}}});return view;} //onCreateView()@Overridepublic void onDestroy() {super.onDestroy();EventBus.getDefault().unregister(this);} //onDestroy//接口回调的方法public interface OnDataTransmissionListener {void dataTransmission(String data);} //OnDataTransmissionListenerpublic void setOnDataTransmissionListener(OnDataTransmissionListener mListener) {this.mListener = mListener;} //setOnDataTransmissionListener()} //class

最后我们来看一下MainActivity.java,分别创建一个Fragment1对象(fragment)和一个Fragment2对象(fragment2),实现Fragment1中的接口函数,使用Fragment2中封装的setData(String) 函数将获取到的数据显示到fragment2的TextView中

package com.example.a59129.twofragments;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Fragment1 fragment1 = new Fragment1();final Fragment2 fragment2 = new Fragment2();fragment1.setOnDataTransmissionListener(new Fragment1.OnDataTransmissionListener() {@Overridepublic void dataTransmission(String data) {fragment2.setData(data);}});} //onCreate()} //class

运行效果:

完整Project下载:https://pan.baidu.com/s/13DgbFTcXNcM-foa4R7kcCw

Android学习之 两个Fragment之间传递信息相关推荐

  1. android fragment传递数据,Android 两个Fragment之间传递数据实例详解

    Android 两个Fragment之间如何传递数据 FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? F ...

  2. ASP.NET基础教程-以查询字符串的方式在两个页面之间传递信息

    查询字符串的方式是将要传递的值连接在URL后面,然后通过Response.Redirect方法实现客户端的重定向.这种方式可以实现在两个页面之间传递信息.由于URL的长度有一定的限制,因此不能传递太大 ...

  3. Android学习笔记13-Acitivty与Fragment通信

    1,概述 首先,如果要实现Activity与其他的Fragment之间实现通信,那么这个Fragment需要拥有一个独立的Layout文件,以便重用,并且以代码添加的方式出现在Activity中. 这 ...

  4. 两个Fragment之间如何传递数据

    FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? Fragment之间不能直接通信,必须通过Activit ...

  5. Android学习之碎片与活动之间的通信

    一.碎片虽然是嵌入在活动中显示的,但是碎片和活动都是各自存在不同的类当中的,并没有什么明显的方式来直接进行通信的.那么如果要在活动中调用碎片里的方法,在碎片里调用活动的方法,一个碎片调用另一碎片的方法 ...

  6. 在两个页面之间传递信息

    在asp.net不同页面之间传值的方法主要有三种: (1)用querystring 方法:在vs2005中新建asp.net网站(发送端),在页面上添加button,两个TextBox,代码如下:   ...

  7. Android下如何计算两经纬点之间距离?

    节选自百度地图API: 若开发者使用的是百度地图或定位API,且版本在1.3.5以后的, 路线规划提供了获取路线距离的方法,见MKRoutePlan 类的 getDistance 方法. 如果是计算任 ...

  8. android正则判断两个符号之间,Android字母、数字、字符任意两种组合正则验证

    释放双眼,带上耳机,听听看~! 最近朋友有个用户名验证,要求字母.数字.字符任意两种组合即可,让我帮写个正则验证,现在正则验证如下: /** * 判断是否匹配正则 * * @param regex 正 ...

  9. android 多个模块,Android 模块化中两个模块之间传递model

    背景描述 最近整理模块化以后的项目中的 common 模块时,发现一个问题: 当初拆分业务 module 的时候,为了省事儿,直接把不同模块公共依赖的 model 放到了 common 模块里,这样导 ...

最新文章

  1. Linux I2C工具查看配置I2C设备【转】
  2. 摄像头自建html直播,html5调用摄像头实现拍照
  3. 用c语言实现存储和读取图片文件,C++实现单张图片读取和保存
  4. 曹大带我学 Go(9)—— 开始积累自己的工具库
  5. html css animation,css animation是什么?
  6. mfc定义了变量仍提示未定义标识符_JavaScript-变量
  7. JVM基础系列第10讲:垃圾回收的几种类型
  8. iOS中MVC等设计模式详解
  9. 人生总是起起落落落落落落...
  10. hdu-4080 Stammering Aliens 字符串hash 模板题
  11. window.postMessage 跨窗口,跨iframe javascript 通信
  12. 单独招生计算机笔试是考什么,单招考试一般考什么内容
  13. 横空出世,比Visio快10倍的画图工具来了
  14. 此页面上的脚本造成Web浏览器运行速度减慢。如果继续运行,您的计算机将可能停止响应。
  15. 给钱,才是真的对你好
  16. 华为路由器设置静态IP
  17. impala的优化策略:广播,hash与straight_join
  18. C语言遍历windows目录文件 并对文件进行读写操作
  19. 秋雨漏更夜,琴音动心痕
  20. 2019年西南交大计算机专硕

热门文章

  1. HP惠普墨盒(817.816)灌墨后计数器清零方法
  2. Word转PDF失败,报错Adobe Acrobat没激活!!!我如此穷,肯定会换个办法解决呀!
  3. Appium+Java模拟手机按键
  4. Xshell和Xftp免费版下载
  5. 控制iframe的小技巧
  6. LinkedIn领英三方插件使用教程
  7. SQL优化速度,关于like
  8. C语言实现三种样式的九九乘法表
  9. Mybatis3源码全解析
  10. Mybatis中foreach的三种用法