EventBus3.0的跳转传值

点击recyclerview的item跳转(eventbus)传值 **第一步,导入依赖,如: /*recyclerview依赖*/ compile 'com.android.support:recyclerview-v7:26.1.0' /*fresco加载图片*/ compile 'com.facebook.fresco:fresco:0.11.0' /*fresco加载动图*/ compile 'com.face 阅读详情

EventBus3.0的跳转传值

在项目中有时候两个Activity跳转或者Activity回传值可以用intent携带基本类型(或对象),基本类型传值没什么问题,但是传对象的时候需要这个对象实现Serializable或者Parcelable接口,但是,有时候比如项目中咱们自己定义了一个类(这个类里面使用了好多的其他自定义类),如果是这种类型的话用intent传值需要把这个类里面的使用的所有类都序列化,这样的改动太大了,这时候我就想到了用EventBus3.0。


需求说明:

现在有两个Activity,A和B,点A中一个按钮跳转到B中并且传递一个对象,B中接收对象

  1. 第一步:在build.gradle中添加compile 'org.greenrobot:eventbus:3.0.0'点击添加完成点击Sync New,等待下载完成即可。

  2. 第二步:创建一个eventvus传递类。

    /**
     * eventvus传递类
     *
     * Created by YJH on 2017/3/21 15:05.
     */
    public class Person {
    
        private int age;
        private String name;
        private String address;
    
        public Person(int age, String name, String address) {
            this.age = age;
            this.name = name;
            this.address = address;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
         @Override
        public String toString() {
        return  "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
        }
    }
    

3.第三步:创建AActivity

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_a"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.my.eventbusdemo.AActivity">

    <Button
        android:onClick="btnClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转到BActivity"
        android:textAllCaps="false" />
</RelativeLayout>

代码:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import org.greenrobot.eventbus.EventBus;

public class AActivity extends AppCompatActivity {

    private Person person;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);

        person = new Person(10, "王健林", "中国");
    }

    public void btnClick(View view) {
        //发送粘性事件
        EventBus.getDefault().postSticky(person);
        startActivity(new Intent(this, BActivity.class));
    }
}
sticky 粘性事件

关于粘性事件,可以参考Android的广播机制,其中有一个粘性广播,粘性广播的意思是:该广播发送后,会保存在内存中,如果后来有注册的Receiver与之匹配,那么该Receiver便会接收到该广播。那么粘性事件同理,在注册之前便把事件发生出去,等到注册之后便会收到最近发送的粘性事件(必须匹配)。注意:只会接收到最近发送的一次粘性事件,之前的会接受不到。

4.创建BActivity

布局代码:

<?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:id="@+id/tv_b"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

代码:

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

/**
 * Created by YJH on 2017/3/21 15:03.
 */

public class BActivity extends AppCompatActivity {

    private TextView tv_b;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);

        tv_b = (TextView) findViewById(R.id.tv_b);
        EventBus.getDefault().register(this);
    }

   /**
    * EventBus的接收方法
    *
    * @param person 传递类
    */
    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void eventBusReceive(Person person) {
        tv_b.setText(person.toString());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}

5.最后不要忘记在AndroidManifest中注册

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".AActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".BActivity"/>

</application>

这样就可以实现自定义类不序列化就传对象了,但切记传递对象最好使用intent方法,用EventBus肯定会对性能有所降低的!!!

Android实现EventBus登录界面与传值(粘性事件) 主要为大家详细介绍了Android实现EventBus登录界面与传值,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 立即下载

相关推荐

AGV避坑指南:海康控制系统与Modbus设备对接的那些‘坑’

本文深入解析海康AGV控制系统与Modbus设备对接中的常见问题及解决方案,涵盖通信协议对接、信号干扰、硬件层问题和软件优化策略。通过真实案例和实用技巧,帮助工程师规避典型陷阱,提升系统稳定性和效率。

l3m4n的博客 740

android EventBus使用 总结

以下由我网上看的文章根据自己理解整理而成,感谢以下文章作者 Hongyang http://blog.csdn.net/lmj623565791/article/details/40794879 启舰 http://blog.csdn.net/harvic880925/article/details/40787203github地址:https://github.com/greenrobot

qq_15338105的专栏 502

Keil MDK下载报错:Flash Download failed终极解决指南(附固件恢复步骤)

本文针对Keil MDK开发中常见的“Error: Flash Download failed”报错,提供了从基础连接到深度诊断的系统性解决指南。文章详细解析了错误成因,并重点介绍了当常规SWD调试失效时,如何通过Bootloader模式和ISP模式(特别是UART Bootloader)恢复“变砖”芯片的完整实战步骤,帮助开发者彻底解决固件下载难题。

weixin_29196613的博客 814

EventBus跳转传值

一,导入依赖 compile 'org.greenrobot:eventbus:3.1.1'              这里用到一个控件 TextInputLayout ,可以使页面变得美观,也需要导入依赖 compile 'com.android.support:design:23.3.0' 二,布局文件        1,第一个页面 xmlns:androi

androidyhr的博客 701

Python+gensim【中文LDA】简洁模型

文章目录完整代码过程详解words_lsdictionarydictionary.doc2bow函数corpuslda 完整代码 from gensim import corpora, models import jieba.posseg as jp # 待分析文本集 text1 = '美国教练坦言,没输给中国女排,是输给了郎平' text2 = '中国女排世界排名第一?真实水平如何,听听巴西和美...

ArYe 2万+

J-SCOPE实战:除了看波形,如何用它和JLink-RTT模式高效调试你的STM32变量?

本文详细介绍了如何利用J-SCOPE和JLink-RTT模式高效调试STM32变量,实现实时数据可视化。通过对比HSS和RTT模式的优劣,提供固件端配置、J-SCOPE设置及实战应用案例,帮助开发者快速掌握这一高效调试技术,特别适用于电机控制、传感器融合等需要实时监控的场景。

weixin_29159613的博客 444

Android中通过EventBus传递消息数据

Android开发中离不开页面间跳转及数据 交互,第三方开源框架存在一个Android事件总线框架。其开源地是:https://github.com/greenrobot/EventBus. 我们在Android可以通过Intent,BroadCastReceiver,ContentProvider甚至回调方法等来传递数据,那EventBus有什么优势呢?开源地址中及网络有很多介绍,我就不献丑了

true100的专栏 7043

mbedtls | 01 - 移植mbedtls库到STM32的两种方法

一、mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议,它的代码占用空间小,非常适合用于嵌入式系统。 mbedtls遵循 Apache 2.0 开源许可协议,目前由 TrustedFirmware 维护(Linaro主持的一个治理开放社区项目),在Github上已收获 2.6k star,目前Github上发布的最新版本为 2.24.0 版本,开源仓库地址为:

Mculover666的博客(嵌入式) 1万+

使用EventBus实现页面间数据的传递

使用EventBus实现页面间数据的传递流程 两个Activity,打开第一个Activity,然后点击跳转第二个Activity,在第二个Activity中填入一些内容模拟登陆,返回数据更新内容 具体实现 每个页面都需要在生命周期中注册和注销EventBus 代码中使用了一个接口定义了一些方法 public interface IText { void getText(Text tex

q137617549的博客 1529

Pytorch实用教程:super(MLP,self).__init__()和super().__init__()有什么区别?

在 Python 中,super()函数用于调用父类(超类)的方法。它的使用在继承关系中非常常见,特别是在初始化继承自父类的属性时。在 PyTorch 中,这通常见于初始化nn.Module类的子类。super()的两种调用方式有微妙的差别,但在 Python 3 中常常用来达到同样的目的。这种写法在 Python 2 中非常常见。这里,super()被调用时需要指定当前类名(MLP)和当前实例(self。

若北辰 1025

27、视网膜血管识别与分类的数据集和验证过程

本文介绍了视网膜血管自动识别与分类方法所使用的数据集及其验证过程。通过30张高分辨率的近红外反射视网膜图像,结合专业医生的手动标注结果,构建了包含597个血管段的基准数据集。研究采用准确率、召回率、F1分数和混淆矩阵等评估指标对模型进行验证,并提出了特征增强和分类器优化策略以提升性能。实验结果显示,该方法在复杂区域具有较强的鲁棒性和较高的准确性,为临床应用提供了可靠的依据。

i7j8k9l的博客 148

Android中的eventBus传值

第一步:在build.gradle中添加依赖  dependencies { compile 'org.greenrobot:eventbus:3.0.0' } 第二步:创建一个 Event类: 注意:enum 不是class  public enum Event { //消息名,可以根据这个名字判断是哪个消息 IMAGE_LOADER_SUCCESS; }//...

weikai_的博客 1059

【数据分享】2012-2022年全国及各城市POI(兴趣点)数据(超20G)

POI(一般作为Point of Interest的缩写,也有Point of Information的说法),通常称作兴趣点,泛指互联网电子地图中的点类数据,基本包含名称、地址、坐标、类别四个属性;随着互联网电子地图服务与LBS应用的普及,POI无论从概念范畴,还是从信息纵深都有了长足发展,互联网各个风口或火山口都和POI有一定关系,如O2O、电商、社交、互联网金融、共享经济等。

J_Giser的博客 2730

EventBus 传值问题

EventBus3.0,Fragment 跳转到外部activity后,从外部activity传值到fragment,无法接收的问题首先分析一下问题的所在;解决这个问题的办法 有两个 首先分析一下问题的所在; 通过debug fragment生命周期,我们发现如果我们把 EventBus的注册和注销写在onResume 和onPause中时,那么从外部activity传值过来时,就不会执行Eve...

流年似水何不珍惜 732

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

tablayout跳转和EventBus传值

第一依赖 //EventBus依赖 implementation'org.greenrobot:eventbus:3.0.0' 在MainActivity写 这是跳转获取数据 public void Jump(){ pager.setCurrentItem(1); } 在Adapter里面写点击事件发送传值 //接口 onClink onClink; ...

weixin_44668084的博客 325

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

EventBus的传值

1.导包        compile 'de.greenrobot:eventbus:3.0.0-beta1'当然我必须说明一下    因为传值如果是从第一个页面传给第二个页面的时候   第二个页面必须要在传值之前存在的。所以我这里就直接用最简单的用法   就是先跳转到第二个页面  在第二个页面点击按钮开始往第一个页面传值    然后点击返回键回到第一个页面  接收到值并赋给控件。2.这是在两个...

你全家都是博客 1047

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

EventBus简单传值

先导入依赖  compile 'org.greenrobot:eventbus:3.0.0' Message类  public class Message {     private String msg;     public Message(String msg) {         this.msg = msg;     }     public St

qingxuan521721的博客 451

Eventbus传值

//添加依赖 compile 'org.greenrobot:eventbus:3.0.0' //MessageEvent类 public class MessageEvent { String pic; String title; public MessageEvent(String pic, String title) { this.pic = pic;

Chen___tao的博客 349

EventBus传值

  依赖: implementation 'org.greenrobot:eventbus:3.0.0' 详细内容:https://www.jianshu.com/p/f9ae5691e1bb 1.布局 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas....

土豆你个卜奈奈的博客 963

EventBus的两个Activity的传值

//===================依赖            compile 'org.greenrobot:eventbus:3.0.0' //=====================================Bean类 public class Bean { String number; String mm; publi

cr_123456789的博客 1115

EventBus传值(Fragment与Activity传值或Activity与Activity传值)

compile 'org.greenrobot:eventbus:3.0.0'  //第一种传值    回调传值   相当于 startActivityForResult(); 回调传值 在要接受消息的页面注册 EventBus.getDefault().register(this); 在要接受消息的页面取消注册      

anshuangxin6666的博客 1273

EventBus 3.0 的使用

EventBus在github的地址:https://github.com/greenrobot/EventBus   一、 发送普通的消息的话 可以这样                   注意:EventBus.getDefault().post(new ClassEvent());  接受消息的activity、fragment等必须先注册了,然后再post消息,然后才能得到消息。

hrklzwzj的博客 2126

EventBus3.0的使用

前言 Android optimized event bus that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality.  Android优化的事件总线,简化了Activity、Fragment、线程、服务等之间的通信,代码更少

wuhongjie24的博客 433

Vue:Vue的路由,组件通讯、传值的多种方式

Vue里面的所有通信方式(组件,动态路由等等)

lyj15390447067的博客 2493

vue用公共组件页面传值_vuejs几种不同组件(页面)间传值的方式

在应用复杂时,推荐使用vue官网推荐的vuex,以下讨论简单SPA(single-page application 简称为 SPA)中的组件间传值。一、路由传值路由对象如下图所示:在跳转页面的时候,在js代码中的操作如下,在标签中使用标签123456this.$router.push({name:'routePage',query/params:{routeParams:params}需要注意的是...

weixin_34233720的博客 702

EventBus3.0介绍与正确使用

EventBus3.0介绍与正确使用 常规的事件传递 Intent意图,跳转+传参(局限性非常大) Handler,通常用来更新主线程UI 泗洪不当容易内存泄漏 Interface接口,仅限于同一线程中数据交互 BroadCastReceiver,有序广播+无序广播 AIDL跨进程通信,代码阅读性不友好,维护成本偏高 其他方式,比如本地存储。。。 什么是EventBus? EventBus是一个Android优化的publish/subscribe消息事件总线简化了应用程序内各个组件间、组件与后台线程间

yanwenyuan0304的专栏 339
上一篇: android回调函数
下一篇: Android强制隐藏输入法键盘
bbccloud
博客等级 码龄11年 23粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值