Android 为什么我的新片段可以';我不同意奥托
我在我的活动中发表了一篇帖子,它在第一个片段BlankFragment中运行良好,但是,当我尝试用BlackFragment2替换BlankFragment,并执行相同的订阅时,它无法再订阅了,下面是代码 主要活动:Android 为什么我的新片段可以';我不同意奥托,android,otto,Android,Otto,我在我的活动中发表了一篇帖子,它在第一个片段BlankFragment中运行良好,但是,当我尝试用BlackFragment2替换BlankFragment,并执行相同的订阅时,它无法再订阅了,下面是代码 主要活动: FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().add(R.id.fr1, new BlankFragment()).
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().add(R.id.fr1, new BlankFragment()).commit();
button = (Button)findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BusStation.getBus().post(new Message("hellworld"));
}
});
btn2 = (Button)findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager1 = getSupportFragmentManager();
fragmentManager1.beginTransaction().replace(R.id.fr1, new BlankFragment2()).commit();
BusStation.getBus().post(new Message("zhengzhi zhou"));
}
});
}
BlankFragment和BlankFragment2使用相同的代码:
@Override
public void onResume() {
super.onResume();BusStation.getBus().register(this);
}
@Override
public void onPause() {
super.onPause();
BusStation.getBus().unregister(this);
}
@Subscribe
public void receiveMsg(Message msg){
textView.setText(msg.getMsg());
}
有人能帮我吗?用commitNow()
代替commit()
使用commitNow()
而不是commit()
请注意,奥托已经停产几年了。您可能希望考虑使用其他形式的事件总线(GrimeRoover的EnvestBUS,
BlankFragment2
实例可能尚未初始化和注册。您可以通过调用fragmentManager1.executePendingTransactions()来测试这一点代码>就在commit()
@Mike M,你好,Mike,我尝试添加如下语句:fragmentManager1.beginTransaction().replace(R.id.fr1,new BlankFragment2()).commit();fragmentManager1.executePendingTransactions();BusStation.getBus().post(新消息(“zhengzhi zhou”);但是应用程序发生了冲突,在BusStation.getBus().post(新消息(“zhengzhi zhou”))的行中有一个日志“java.lang.RuntimeException:无法分派事件:class com.example.administrator.myapplication.Message to handler”;进一步查看堆栈跟踪。具体原因可能还有另一个例外。@MikeM,噢……谢谢,我写错了id……现在可以用了,谢谢一封关于Otto已经停产几年的通知。您可能希望考虑使用其他形式的事件总线(GrimeRoover的EnvestBUS, LoopBaskMasks<代码>,基于RxJava的代码,<代码> MulabiLeVeDATA < /代码>等)。<代码>碎片事务< /COS> S默认情况下异步执行。在您发布该消息时,BlankFragment2
实例可能尚未初始化和注册。您可以通过调用fragmentManager1.executePendingTransactions()来测试这一点代码>就在commit()
@Mike M,你好,Mike,我尝试添加如下语句:fragmentManager1.beginTransaction().replace(R.id.fr1,new BlankFragment2()).commit();fragmentManager1.executePendingTransactions();BusStation.getBus().post(新消息(“zhengzhi zhou”);但是应用程序发生了冲突,在BusStation.getBus().post(新消息(“zhengzhi zhou”))的行中有一个日志“java.lang.RuntimeException:无法分派事件:class com.example.administrator.myapplication.Message to handler”;进一步查看堆栈跟踪。具体原因可能还有另一个例外。@MikeM,噢……谢谢,我写错了id……现在可以了,非常感谢
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// Replace the contents of the container with the new fragment
ft.replace(R.id.fragment_place, fragment);
// or ft.add(R.id.your_placeholder, new FooFragment());
// Complete the changes added above
ft.commitNow();