从广播接收器调用getsupportfragmentmanager()时出错

dgtucam1  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(429)

我尝试调用一个调用getsupportfragmentmanager()的方法,但是得到:

IllegalStateException: FragmentManager has not been attached to a host.

广播接收器启动,活动中的方法(当前在ui中)启动,如下所示,但我得到错误:

BottomSheet bottomSheet = new BottomSheet();
bottomSheet.show(getSupportFragmentManager(), "bottomButtons");

我所要做的就是从一个服务中调用bottomsheet,因为我不能从服务中调用getsupportfragmentmanager,所以我必须通过广播接收器来调用它!如何让工作表显示,由我的服务中的事件触发?

i1icjdpr

i1icjdpr1#

从后台服务调用显示位于当前显示在ui中的活动中的底部工作表的方法。我使用了可变的livedata。
我初始化了一个全局布尔值,在我的服务中完成;

public static MutableLiveData<Boolean> finished = new MutableLiveData<Boolean>();

当我的服务中触发所需的事件时,我将live data变量的值设置为true。具有

finished.setValue(true);

在活动中,我需要显示我通过以下方式观察此变量的底页:

finished.observe(this, new Observer<Boolean>(){

@Override
public void onChanged(Boolean aBoolean){
if(aBoolean){
//I call my Method here which displays my Bottom Sheet, this is the method that contains the getSupportFragmentManager().
}
}
});

我希望这可以帮助任何人在我的情况。

cbeh67ev

cbeh67ev2#

Fragment 是ui的一部分。 BroadcastReceiver 以及 Service 是后台组件,与ui无关。你甚至不能调用这个方法 getSupportFragmentManager()BroadcastReceiver . 这甚至不应该编译!
仅限 Activity 组件可以用ui做一些事情。

相关问题