gpt4 book ai didi

android - fragment : No subscribers registered for event class 中的 GreenRobot EventBus 错误

转载 作者:可可西里 更新时间:2023-11-01 18:47:23 27 4
gpt4 key购买 nike

我有一个 Activity ,它的布局包含一个 FrameLayout。我使用 framelayout 作为 fragment 容器。我使用 FragmentManager 事务替换了 FrameLayout 中的 fragment 。

在 fragment 的一种 onCreate 方法中,我使用 EventBus 注册 fragment 。

@Override
public void onCreate(){
EventBus.getDefault().register(this);
// other initialization code
}

fragment 在其布局中有一个 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());
}
});

此事件的事件处理程序方法在同一个 fragment 中,即该 fragment 具有以下方法

public void onEvent(MyEvent e){
//some code;
}

在应用程序失去焦点并变为非 Activity 状态(由于按下主页按钮或屏幕锁定)之前,这一切正常。当我再次激活该应用程序时,不会调用事件的事件处理程序。我可以在 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:

当应用程序由于屏幕锁定或主页按钮被按下而变为非 Activity 状态时,将调用 fragment 的 onStop 方法。从 EventBus 注销 fragment 的代码在 onStop 方法中。当应用程序再次激活时,将调用 fragment 的 onStart 和 onResume 方法。所以我移动了我的代码以在其 onStart 方法中向 EventBus 注册该 fragment 。

@Override
public void onStart(){
super.onStart();
EventBus.getDefault().register(this);
}

我放置了一些日志语句来检查 onStart 方法是否在应用程序激活时实际被调用。它正在被调用。当应用程序变为非 Activity 状态然后再次 Activity 时,仍然无法正常工作。

编辑 2我忘了提及包含此 fragment 的 Activity 也订阅了 EventBus。向 EventBus 注册 Activity 的代码在其 onCreate 方法中,注销 Activity 的代码在其 onStop 方法中。

最佳答案

包含此 fragment 的 Activity 也订阅了 EventBus。向 EventBus 注册 Activity 的代码在其 onCreate 方法中,注销 Activity 的代码在其 onStop 方法中。

当应用程序变得不活动时(由于屏幕锁定或按下主页按钮),包含 Activity 的 onStop 方法被调用并且它正在从 EventBus 中注销。出于某种原因,它包含的 fragment 也未注册(我不确定为什么)。向 EventBus 重新注册 fragment 无效。

我通过移动代码以取消注册包含 Activity 到它的 onDestroy 方法解决了这个问题。

我仍然不确定为什么这样做有效,但至少它解决了我当前的问题。如果有人有解释或更好的见解,请发表评论或发表答案。

关于android - fragment : No subscribers registered for event class 中的 GreenRobot EventBus 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26215831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com