2017-08-01 15 views
2

私はAndroidには新しく、EventBusを使用してFragmentからそのコンテナのアクティビティにメッセージを送信しようとしています。しかし 、私は取得していますエラー:Kotlinが動作しないEventBus

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<FloatingActionButton>(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') 
    } 
} 

私は間違っていると思いますか?

+0

ここで、あなたは 'addFragment'メソッドを呼び出しますか? – Raghunandan

+0

'' 'addFragment'''はまだ呼び出されていません。私は断片を追加するためにそれを呼び出す予定だった。しかし、現在、イベントを取得するには固執しています。 – Khawar

+0

タスクリストの断片がアクティビティに添付されているかどうかを明確にしたかっただけです。あなたのコードはうまくできていて、自分自身で動作しようとしました – Raghunandan

答えて

1

I am new to Android ...

次に、daggerとrxをよく知っておくとよいでしょう。 イベントバスはで、アンドロイドの悪いものであり、必要以上に複雑になることがよくあります。

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

+0

あなたの考えを共有していただきありがとうございます。私もrxと一緒に仕事をするつもりでしたが、EventBusを使って簡単にMVPを作ろうと思っていました。 – Khawar

0

にご加入したメソッド名を変更しよう:

onMessageEvent(event: TaskListFragment.TaskCreateSelectEvent) 

しかし@Lordフラッシュが示唆したように - rxjavaの代わりeventbusを使用しています。 Tkae PublishSubject/PublishProcessor(rx 2.0)クラスをご覧ください

+0

お返事ありがとうございます。私はこれを試しましたが、うまくいきませんでした。しかし、私はrxのものにしようとします。 – Khawar

+0

メソッド名とイベントの関係は何ですか?イベントがメソッドパラメータの基底で認識されるためです。 –

関連する問題