1

서비스에서 현재 조각을 가져 오려고하지만 null이 표시됩니다.서비스에서 현재 조각 가져 오기

서비스 :

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

는 기본적으로 나는 그것을 볼 수 있다면 어떤 값을 보낼 필요하거나 알림을 만들 보이지 않는 경우. 둘 다 작동하지만 거기에 논리를 넣으면 currentFragment에 null 값이 표시됩니다. 감사합니다. . 모두의

List<Fragment> fragmentList = fragmentManager.getFragments(); 
Log.d("MyClass", "fragmentList count: " + fragmentManager.getBackStackEntryCount()); 
for (Fragment fragment : fragmentList) { 
    Log.d("MyClass", "fragmentList: " + fragment.getId() + " : "+ fragment.getTag()); 
} 

답변

1

내가 먼저 모든 조각의 이름을 확인하여 디버깅 할 것이다. 나는 귀하의 경우에는 서비스 개체 자체 (싱글 톤 패턴)

를 사용

  1. 사용 텐트
  2. Bind to Services
  3. : 그런 다음 활동 및 서비스 간의 통신을 수있는 방법을 몇 가지 디자인 패턴이 2 개 또는 3 개의 옵션을 선택할 수 있습니다.

    두 번째로 Observer pattern을 구현하십시오. 활동은 observer이어야하며 서비스는 subject이어야합니다.

    마지막으로 onCreate() 메소드는 서비스에서 메소드 호출로 메시지를 가져 오기 위해 옵저버로 서비스를 등록합니다. 등록 방법은 선택하는 옵션에 달려 있습니다.

    P. 파편은 안드로이드 OS에서 호출되는 라이프 사이클 메소드에서 생성되기 때문에 Activity 객체를 생성하여 파편을 얻지 못한다는 것이 명백하다고 생각합니다.

+0

내가 계산에 0 얻고 위해에 nullpoiterexception (조각 조각 : fragmentList) – bond

+0

그래서 조각 전혀. 조각을 만든 위치와 조각을 만든 직후에 코드로 돌아가서 조각 목록을 확인하십시오. –

+0

그래, 이제 막 끝내야했다. 감사. – bond

2

먼저 내가 당신이라면 나는 MainActivity에 코드의 조각을 이동합니다 :

-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 
} 
+0

코드가 컨텍스트 누출을 만들 수 있습니다. – LordRaydenMK

+0

그 점을 지적 해 주셔서 감사합니다. 수정 프로그램을 권할 수 있습니까? – bond

+0

활동을 정적 변수에 지정하지 마십시오.액티비티/프래그먼트에서 정적 부울을 사용하고'onResume/onPause'에서 true/false로 설정하여 액티비티/프래그먼트가 표시되는지 확인할 수 있습니다. 또는 Robertas Setkus의 대답에 언급 된 다른 옵션을 확인하십시오 – LordRaydenMK