我有一个活动,它的布局包含一个FrameLayout。我使用framelayout作为片段容器。我使用FragmentManager事务来替换FrameLayout中的片段。GreenRobot EventBus分段错误:未注册用户事件类
在其中一个片段的onCreate方法中,我使用EventBus注册片段。
@Override
public void onCreate(){
EventBus.getDefault().register(this);
// other initialization code
}
该片段在其布局中有一个GridView。每当在GridView的项目被点击我发布一个事件EventBus
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.fragment_category, container, false);
gridView = (GridView) rootView.findViewById(R.id.categry_grid_view);
gridAdapter = new CustomGridAdapter(getActivity());
gridView.setAdapter(gridAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Category clickedCategory = gridAdapter.getItem(position);
EventBus.getDefault().post(new MyEvent());
}
});
此事件的事件处理方法是在IE中的片段相同的片段有以下方法
public void onEvent(MyEvent e){
//some code;
}
该作品直到应用程序失去焦点并变为不活动(由于按下主屏幕按钮或屏幕锁定)。当我再次使应用程序处于活动状态时,不会调用事件的事件处理程序。我可以看到的logcat下面的语句
com.example.app D/Event﹕ No subscribers registered for event class com.example.app.MyEvent
com.example.app D/Event﹕ No subscribers registered for event class de.greenrobot.event.NoSubscriberEvent
谁能告诉我我在做什么错在这里?
编辑1:
当应用程序成为非由于屏幕锁定或主页按钮被按压,所述片段的的onStop方法被调用。从EventBus注销片段的代码位于onStop方法中。当应用程序再次变为活动状态时,将调用片段的onStart和onResume方法。所以我移动我的代码,在其onStart方法中使用EventBus注册片段。
@Override
public void onStart(){
super.onStart();
EventBus.getDefault().register(this);
}
我放了一些日志语句来检查应用程序变为活动时是否实际调用onStart方法。它被称为。当应用程序变为非活动状态然后再次激活时,仍然无法正常工作。
编辑2 我忘了提及包含这个片段的活动也订阅了EventBus。使用EventBus注册活动的代码位于其onCreate方法中,注销活动的代码位于其onStop方法中。
我的帖子中没有看到任何注册码。 – 2014-10-06 12:16:31
它在onCreate方法中。在顶部:EventBus.getDefault()。register(this); – GunnerFan 2014-10-07 06:39:19
@ S.D。检查我的编辑问题。 – GunnerFan 2014-10-07 07:35:26