Android学习之 两个Fragment之间传递信息
这个简单的实例实现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之间传递信息相关推荐
- android fragment传递数据,Android 两个Fragment之间传递数据实例详解
Android 两个Fragment之间如何传递数据 FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? F ...
- ASP.NET基础教程-以查询字符串的方式在两个页面之间传递信息
查询字符串的方式是将要传递的值连接在URL后面,然后通过Response.Redirect方法实现客户端的重定向.这种方式可以实现在两个页面之间传递信息.由于URL的长度有一定的限制,因此不能传递太大 ...
- Android学习笔记13-Acitivty与Fragment通信
1,概述 首先,如果要实现Activity与其他的Fragment之间实现通信,那么这个Fragment需要拥有一个独立的Layout文件,以便重用,并且以代码添加的方式出现在Activity中. 这 ...
- 两个Fragment之间如何传递数据
FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? Fragment之间不能直接通信,必须通过Activit ...
- Android学习之碎片与活动之间的通信
一.碎片虽然是嵌入在活动中显示的,但是碎片和活动都是各自存在不同的类当中的,并没有什么明显的方式来直接进行通信的.那么如果要在活动中调用碎片里的方法,在碎片里调用活动的方法,一个碎片调用另一碎片的方法 ...
- 在两个页面之间传递信息
在asp.net不同页面之间传值的方法主要有三种: (1)用querystring 方法:在vs2005中新建asp.net网站(发送端),在页面上添加button,两个TextBox,代码如下: ...
- Android下如何计算两经纬点之间距离?
节选自百度地图API: 若开发者使用的是百度地图或定位API,且版本在1.3.5以后的, 路线规划提供了获取路线距离的方法,见MKRoutePlan 类的 getDistance 方法. 如果是计算任 ...
- android正则判断两个符号之间,Android字母、数字、字符任意两种组合正则验证
释放双眼,带上耳机,听听看~! 最近朋友有个用户名验证,要求字母.数字.字符任意两种组合即可,让我帮写个正则验证,现在正则验证如下: /** * 判断是否匹配正则 * * @param regex 正 ...
- android 多个模块,Android 模块化中两个模块之间传递model
背景描述 最近整理模块化以后的项目中的 common 模块时,发现一个问题: 当初拆分业务 module 的时候,为了省事儿,直接把不同模块公共依赖的 model 放到了 common 模块里,这样导 ...
最新文章
- Linux I2C工具查看配置I2C设备【转】
- 摄像头自建html直播,html5调用摄像头实现拍照
- 用c语言实现存储和读取图片文件,C++实现单张图片读取和保存
- 曹大带我学 Go(9)—— 开始积累自己的工具库
- html css animation,css animation是什么?
- mfc定义了变量仍提示未定义标识符_JavaScript-变量
- JVM基础系列第10讲:垃圾回收的几种类型
- iOS中MVC等设计模式详解
- 人生总是起起落落落落落落...
- hdu-4080 Stammering Aliens 字符串hash 模板题
- window.postMessage 跨窗口,跨iframe javascript 通信
- 单独招生计算机笔试是考什么,单招考试一般考什么内容
- 横空出世,比Visio快10倍的画图工具来了
- 此页面上的脚本造成Web浏览器运行速度减慢。如果继续运行,您的计算机将可能停止响应。
- 给钱,才是真的对你好
- 华为路由器设置静态IP
- impala的优化策略:广播,hash与straight_join
- C语言遍历windows目录文件 并对文件进行读写操作
- 秋雨漏更夜,琴音动心痕
- 2019年西南交大计算机专硕