这里直接教大家怎么用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
}