我有一個活動,它的佈局包含一個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