从服务获取当前片段

时间:2014-07-15 15:36:31

标签: android android-fragments android-service intentservice

我试图从服务中获取当前片段,但我得到了空。

服务:

MainActivity mainActivity=new MainActivity();
FragmentManager fm= mainActivity.getSupportFragmentManager();
Fragment currentFragment = fm.findFragmentByTag("myFragment");
if (currentFragment.isVisible()){
    // send some stuff 
} else {
        // create notification
}

基本上我需要它来发送一些值,如果它可见或者如果它不可见则创建通知。两者都在工作,但当我把逻辑放在那里时,我得到currentFragment的空值。 感谢。

3 个答案:

答案 0 :(得分:2)

首先,如果我是你,我会把这段代码移到MainActivity。然后,有几种设计模式可以在Activity和Service之间进行通信:

  1. 使用意图
  2. Bind to Services
  3. 使用服务对象本身(单例模式)
  4. 在您的情况下,我会选择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
}