在调用类之前,eventbus如何注册onevent方法? [英] How does eventbus register the onevent method before the class is invoked?

查看:101
本文介绍了在调用类之前,eventbus如何注册onevent方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

listItemFragment将事件发布到ItemDetailFragment以刷新UI.因为从未使用过ItemDetailFragment,所以从未调用ItemDetailFragment中的register()方法.所以我想知道listItemFragment中的发布事件如何知道ItemDetailFragment中的onevent方法.这是源代码:

The listItemFragment post an event to the ItemDetailFragment to refresh the UI. BUt the ItemDetailFragment is never used before, so the register() method in ItemDetailFragment is never invoked. So I want to know how the posted event in listItemFragment know the onevent method in ItemDetailFragment. Here is the source code:

package com.angeldevil.eventbusdemo;

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.angeldevil.eventbusdemo.Event.ItemListEvent;

import de.greenrobot.event.EventBus;

public class ItemListFragment extends ListFragment
{

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    // Register
    EventBus.getDefault().register(this);
}

@Override
public void onDestroy()
{
    super.onDestroy();
    // Unregister
    EventBus.getDefault().unregister(this);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
    super.onViewCreated(view, savedInstanceState);

    new Thread()
    {
        public void run()
        {
            try
            {
                Thread.sleep(2000); 

                EventBus.getDefault().post(new ItemListEvent(Item.ITEMS));
            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        };
    }.start();
}

public void onEventMainThread(ItemListEvent event)
{
    setListAdapter(new ArrayAdapter<Item>(getActivity(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1, event.getItems()));
}

@Override
public void onListItemClick(ListView listView, View view, int position,
        long id)
{
    super.onListItemClick(listView, view, position, id);
    EventBus.getDefault().post(getListView().getItemAtPosition(position));
}

 }


ItemDetailFragment:

package com.angeldevil.eventbusdemo;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import de.greenrobot.event.EventBus;

    public class ItemDetailFragment extends Fragment
{

private TextView tvDetail;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    // register
    EventBus.getDefault().register(this);
}

@Override
public void onDestroy()
{
    super.onDestroy();
    // Unregister
    EventBus.getDefault().unregister(this);
}


public void onEventMainThread(Item item)
{
    if (item != null)
        tvDetail.setText(item.content);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{
    View rootView = inflater.inflate(R.layout.fragment_item_detail,
            container, false);
    tvDetail = (TextView) rootView.findViewById(R.id.item_detail);
    return rootView;
}
}

推荐答案

GreenRobot EventBus使用反射来查找名为onEvent的方法,并将事件对象传递给具有匹配签名的方法.

The GreenRobot EventBus uses reflection to find methods called onEvent and delivers the event object to those with a matching signature.

这篇关于在调用类之前,eventbus如何注册onevent方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆