Fragment间通信传递数据 Communicating with Other Fragments

2024-06-02 07:38

本文主要是介绍Fragment间通信传递数据 Communicating with Other Fragments,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求:
一个Activity中显示两个Fragment,想要在FragmentA中点击某个按钮时,切换到FragmentB,同时把用户输入的数据传递到B中。

思路:
Fragment的显示与否决定权在Activity里,想要传递数据就得通过这个“媒婆”,两个Fragment不应该直接通信。

方法:(其实这里就是一个回调的概念。)

1。先在FragmentA中定义一个接口,例如:

    /*** 注册成功后回调,用于传递数据至登录*/public interface OnRegisterSuccessListener {void onRegisterSuccess(String phoneNumber);}

2。 然后在A中创建一个OnRegisterSuccessListener接口的对象,在按钮的点击事件里调用对象的onRegisterSuccess方法,并传入数据phoneNumber;

    if (status == 0) {registerResult = "注册成功!";mOnRegisterSuccessListener.onRegisterSuccess(phoneNumber);}

3。哦差点忘了实例化这个对象,我们 需要重写onAttach方法,在Activity与Fragment绑定时实例化(抛出的那个异常是为了在Activity没有实现接口时给个提醒)

 @Overridepublic void onAttach(Activity activity) {super.onAttach(activity);try {mOnRegisterSuccessListener = (OnRegisterSuccessListener) activity;} catch (ClassCastException e) {throw new ClassCastException(activity.toString()+ "must implement OnRegisterSuccessListener!");}}

4。控制Fragment的Activity实现这个接口,并且实现回调方法:

public class LoginActivity extends Activity implements RegFragment.OnRegisterSuccessListener

5。在实现回调方法里将A传递过来的数据用Bundle传递到FragmentB中:

@Overridepublic void onRegisterSuccess(String phoneNumber) {LogFragment logFragment = new LogFragment();Bundle bundle = new Bundle();bundle.putString("phoneNumber",phoneNumber);logFragment.setArguments(bundle);getFragmentManager().beginTransaction().replace(R.id.container, logFragment).commit();}

6。最后一步,在FragmentB中接收数据:

 Bundle bundle = getArguments();if (bundle != null){String phoneNumber = bundle.getString("phoneNumber");if (!TextUtils.isEmpty(phoneNumber)) {etNumber.setText(phoneNumber);}}else {LogUtils.e(TAG,"Bundle is null !");}

7。这样就实现了2个Fragemnt间的数据通信。

学习地址:Communicating with Other Fragments

这篇关于Fragment间通信传递数据 Communicating with Other Fragments的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023355

相关文章

java线程深度解析(二)——线程互斥技术与线程间通信

http://blog.csdn.net/daybreak1209/article/details/51307679      在java多线程——线程同步问题中,对于多线程下程序启动时出现的线程安全问题的背景和初步解决方案已经有了详细的介绍。本文将再度深入解析对线程代码块和方法的同步控制和多线程间通信的实例。 一、再现多线程下安全问题 先看开启两条线程,分别按序打印字符串的

C++及AIDL服务间通信相关

只做细节展示,没有什么逻辑,陆续补充中

ViewPager+fragment实现切换页面(一)

如今的很多应用中都是下面有一排按钮,点击可以切换页面,滑动也可以切换页面。下面就来简单的实现这个功能。 思路 首先肯定是会用到viewpager这个控件,为了能够向下兼容,最好用v4包下的viewpager,Activity要继承FragmentActivity 其次用一个集合来存储所有的fragment页面在设置viewpager的适配器时,把存储fragment页面的list集合传入ada

【Linux】Linux 共享内存:高效的进程间通信

文章目录 Linux 共享内存:高效的进程间通信1. 什么是共享内存?2. 共享内存的实现步骤2.1 创建共享内存2.2 映射共享内存2.3 读写共享内存2.4 解除映射和删除共享内存 3. 共享内存的同步问题信号量示例: 4. 共享内存的优势与劣势优势:劣势: 5. 使用场景6. 结论 Linux 共享内存:高效的进程间通信 共享内存(Shared Memory)是 Li

安卓中的fragment与viewPager的使用问题的解决

最近使用viewPager,结合fragment使用,发现fragment的周期将不符合他的原有的周期流程,多个fragment将会产生错位问题。       通过研究相关代码,发现fragment的切换实际调用的函数为setUserVisibleHint,通过在其中重写方法,将会达到fragment正确切换的效果。       public void setUserVisible

【Linux】Linux 管道:进程间通信的利器

文章目录 Linux 管道:进程间通信的利器1. 什么是管道?2. 管道的分类2.1 匿名管道(Unnamed Pipe)2.2 命名管道(Named Pipe,FIFO) 3. 管道的局限性4. 结论 Linux 管道:进程间通信的利器 在 Linux 系统中,管道(Pipe)是进程间通信(IPC, Inter-Process Communication)的重要机制之一。

【Linux】进程间通信(IPC)(第十四篇)

目录 1.消息队列 2.管道机制 1.匿名管道(PIPE) 2.命名管道 3.MMAP内存共享映射 4.信号 5.信号量 6.套接字 7.共享内存通信 进程用户空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。 1.进程间通信的应用场景 数据传输:一个进程需要

Activity被回收导致其内部的Fragment

方式一:   MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果! 方式二: @Overrideprotected void onSaveInstanceState(Bundle outSta

Android - 总结Activity与Fragment打开的时候获取组件的大小

Activity中获取 组件大小        代码: @Overridepublic void onWindowFocusChanged(boolean hasFocus) {// TODO Auto-generated method stubsuper.onWindowFocusChanged(hasFocus);Log.d("TAG", "A-button1-->"+button1);L

【Unix编程】进程间通信(IPC)

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 一、管道 管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。 1、特点: 它是半双工