我试图从服务中获取当前片段,但我得到了空。
服务:
MainActivity mainActivity=new MainActivity();
FragmentManager fm= mainActivity.getSupportFragmentManager();
Fragment currentFragment = fm.findFragmentByTag("myFragment");
if (currentFragment.isVisible()){
// send some stuff
} else {
// create notification
}
基本上我需要它来发送一些值,如果它可见或者如果它不可见则创建通知。两者都在工作,但当我把逻辑放在那里时,我得到currentFragment的空值。 感谢。
答案 0 :(得分:2)
首先,如果我是你,我会把这段代码移到MainActivity
。然后,有几种设计模式可以在Activity和Service之间进行通信:
在您的情况下,我会选择2或3个选项。
其次,实施Observer pattern,其中活动应为observer
,服务可为subject
。
最后,在onCreate()
方法中注册Service作为观察者,以便将消息作为来自服务的方法调用。如何注册取决于您将选择的选项。
P.S。我认为很明显,你只需要创建Activity对象就可以获得片段,因为片段会在Android OS调用的某些生命周期方法上创建。
答案 1 :(得分:1)
我首先通过检查所有片段名称进行调试:
List<Fragment> fragmentList = fragmentManager.getFragments();
Log.d("MyClass", "fragmentList count: " + fragmentManager.getBackStackEntryCount());
for (Fragment fragment : fragmentList) {
Log.d("MyClass", "fragmentList: " + fragment.getId() + " : "+ fragment.getTag());
}
答案 2 :(得分:-1)
好的,我可以这样做:
MainActivity:
Static Context context;
...
context=this;
服务:
FragmentManager fm = ((FragmentActivity) MainActivity.context).getSupportFragmentManager();
Fragment currentFragment = fm.findFragmentByTag("myFragment");
if (currentFragment.isVisible()){
// send some stuff
} else {
// create notification
}
EDIT1:
在LordRaydenMK的帮助下,我让它变得更容易了。不知道我怎么也记得早点这样做。
片段:
static boolean visible;
OnResume
visible=true;
OnPause
visible=false;
服务:
if (MyFragment.visible()){
// send some stuff
} else {
// create notification
}