Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我的新片段可以';我不同意奥托_Android_Otto - Fatal编程技术网

Android 为什么我的新片段可以';我不同意奥托

Android 为什么我的新片段可以';我不同意奥托,android,otto,Android,Otto,我在我的活动中发表了一篇帖子,它在第一个片段BlankFragment中运行良好,但是,当我尝试用BlackFragment2替换BlankFragment,并执行相同的订阅时,它无法再订阅了,下面是代码 主要活动: FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().add(R.id.fr1, new BlankFragment()).

我在我的活动中发表了一篇帖子,它在第一个片段BlankFragment中运行良好,但是,当我尝试用BlackFragment2替换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, 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……现在可以用了,谢谢一封关于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();