EventBus(快速入门)

这里直接教大家怎么用EventBus 不绕圈子 想了解理论知识请移步

我之前学习的时候找了网上好多文章
要么是 将一个简单的例子非要搞得花里胡哨的复杂化 考虑过初学者的感受吗? 人家是来学习的,
要么是 讲解一半让一个初学者去猜
还有的就是一个项目根本就运行不了的也放上去
就是因为这些我被气到不行了
我要做到的是带领大家快速的入门 入了门大家往后学习就比较轻松了
上干货!

这是app的启动页面MainActivity.class

package com.example.myapplication

import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button7.setOnClickListener {
            startActivity(Intent(this,A1::class.java))
        }

        EventBus.getDefault().register(this);  //注册
    }

    //接收消息
    @Subscribe(threadMode = ThreadMode.MAIN)      //只有当消息被发送后才能接收成功
    fun onEvent(eventMessage: String) {
        Toast.makeText(this, "$eventMessage", Toast.LENGTH_SHORT).show()
    }


    override fun onDestroy() {
        EventBus.getDefault().unregister(this)      //关闭
        super.onDestroy()
    }
}

这是第二个activity

package com.example.myapplication

import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_a1.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode

class A1 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_a1)



        EventBus.getDefault().post("123123");  //发送数据
    }

    override fun onDestroy() {
        EventBus.getDefault().unregister(this) //解除注册
        super.onDestroy()
    }
}
这里跟大家讲解一下 
因为这里不是我们平时对跳转传值的正常逻辑
这里的代码是:
   先从MainActivity里面定义**接收**的方法然后再跳转到A1.class页面		里面进行消息发送然后才能接收到消息
   这里是一个误区 因为我刚开始学的时候就是进入了这个误区以为自己一直失败没能处理

接下来是正常逻辑的传值发送
EventBus粘性事件

第一个页面

package com.lenovo.studentClient.activity

import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Toast
import com.lenovo.studentClient.R
import kotlinx.android.synthetic.main.a1.*
import org.greenrobot.eventbus.EventBus
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.LinkedHashMap

class A1 : BaseActivity() {
    internal lateinit var listmap : MutableList<MutableMap<String,Any>>
    override fun onClick(v: View?) {
    }

    override fun initializeWithState(savedInstanceState: Bundle?) {
        listmap = ArrayList()
        button.setOnClickListener {
            if (ed_title.text.isEmpty() or ed_yijian.text.isEmpty() or ed_iphone.text.isEmpty()) {
                Toast.makeText(this, "不能为空", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
        }
            var map: MutableMap<String,Any>  =  LinkedHashMap()
            map.put("title",ed_title.text)
            map.put("time",Date())
            listmap.add(map)
            EventBus.getDefault().postSticky(listmap)       //!!!!!黏性事件发送  (可先发送后注册接收)
            Toast.makeText(this, "提交成功", Toast.LENGTH_SHORT).show()
        }
        textView.setOnClickListener {
            startActivity(Intent(this, A1_detali::class.java))
        }
    }

    override fun getLayoutTitle() = "意见反馈"

    override fun onAfter() {
    }

    override fun initData() {
        Thread{ kotlin.run {

        }}.start()
    }

    override fun initView() {
    }

    override fun getLayoutId() = R.layout.a1
}

第二个页面(详细页面)

package com.lenovo.studentClient.activity

import android.os.Bundle
import android.view.View
import android.widget.SimpleAdapter
import android.widget.Toast
import com.lenovo.studentClient.R
import kotlinx.android.synthetic.main.a1.*
import kotlinx.android.synthetic.main.a1_detali.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.LinkedHashMap

class A1_detali : BaseActivity() {
      var listmap : MutableList<MutableMap<String,Any>> = ArrayList()
     lateinit var simpleAdapter: SimpleAdapter
    override fun onClick(v: View?) {
    }

    override fun initializeWithState(savedInstanceState: Bundle?) {
        println("initializeWithState")
        EventBus.getDefault().register(this)
    }

    @Subscribe(sticky = true)       //接收事件方法   添加sticky属性
    public fun info(listmap: MutableList<MutableMap<String,Any>>) {
        println("info")

        simpleAdapter = SimpleAdapter(this, listmap, R.layout.a1_detali_adapter, arrayOf("title","time"), intArrayOf(R.id.textView3,R.id.textView5))
        listview_a1_detali.adapter = simpleAdapter
          this.listmap = listmap;
        listmap.forEach {
            println(it)
        }
          simpleAdapter.notifyDataSetChanged()
    }

    override fun getLayoutTitle() = "我的意见"

    override fun onAfter() {
        println("onAfter")

    }

    override fun initData() {
        println("initData")

        Thread {
            kotlin.run {

            }
        }.start()
    }

    override fun initView() {        println("initView")

    }

    override fun getLayoutId() = R.layout.a1_detali
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值