与Kotlin事件总线不工作

我是Android新手,尝试使用EventBus将消息从Fragment发送到其容器Activity。 但是,我收到错误:

D/EventBus: No subscribers registered for event class com.app.todo.controllers.task.TaskListFragment$TaskCreateSelectEvent 

以下是与EventBus相关的Activity类中的代码:

 public class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } @Subscribe(threadMode = ThreadMode.MAIN) fun onTaskCreateSelectEvent(event: TaskListFragment.TaskCreateSelectEvent) { Log.d("TAG", "On Main Activity") } fun addFragment(fragment: Fragment) { val transaction = supportFragmentManager.beginTransaction() transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit) transaction.add(R.id.task_fragment_container, fragment) transaction.addToBackStack(fragment.javaClass.simpleName) transaction.commit() } public override fun onStart() { super.onStart() EventBus.getDefault().register(this) } public override fun onStop() { super.onStop() EventBus.getDefault().unregister(this) } } 

以下是在片段类

 public class TaskListFragment : Fragment() { private var fab: FloatingActionButton? = null public class TaskCreateSelectEvent { var fab: FloatingActionButton? = null } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { var view = inflater!!.inflate(R.layout.task_list_fragment, container, false) fab = view.findViewById(R.id.fab) fab!!.setOnClickListener { val selectEvent = TaskCreateSelectEvent() EventBus.getDefault().post(selectEvent) } return view } } 

这是如何在build.gradle文件中添加库。

 apply plugin: 'kotlin-kapt' dependencies { compile 'org.greenrobot:eventbus:3.0.0' kapt 'org.greenrobot:eventbus-annotation-processor:3.0.1' } kapt { arguments { arg('eventBusIndex', 'com.app.todo.controllers.MyEventBusIndex') } } 

任何想法我做错了什么?

我是Android的新手…

那么你应该更好地熟悉匕首和rx。 事件总线在Android上是一件坏事 ,往往使事情变得比必要的更复杂。

https://www.google.de/search?q=android+rxjava+instead+of+eventbus

尝试将您的订阅方法名称更改为:

 onMessageEvent(event: TaskListFragment.TaskCreateSelectEvent) 

但@Lord Flash建议 – 使用rxjava而不是事件总线。 看看PublishSubject/PublishProcessor (rx 2.0)类

Interesting Posts