2013-07-09 5 views
2
public class MyFragment extends Fragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setRetainInstance(true); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     if (?) { 
      ... handle ... 
     } 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 

     if (?) { 
      ... handle ... 
     } 
    } 
} 

안녕하세요. onResume() 및 onPause() 중 일부를 처리해야하는 인스턴스 유지 단편을 가지고 놀고 자합니다. 나는 이것을 주 활동에 추가했으며, 지금까지는 한 가지를 제외하고는 위대한 활동을하고 있습니다. 응용 프로그램에서 다른 활동을 입력하면 응용 프로그램 설정을 가정 해 봅시다.이 프래그먼트는 여전히 화면을 뒤집을 때 onResume 및 onPause를 실행합니다. 내가 필요로 무엇확인 라이프 사이클 상태

이 단편에 부착되어 활동 여부를 확인하는 방법입니다, 전경에 있지 않습니다. isTaskRoot와 같은 것을 시도했지만,이 라이프 사이클 메소드가 실행되는 한 true를 반환합니다. 이제 Android가 onResume을 실행 한 후이 조각을 일시 중지 상태로 두는 것을 알고 있다면 onResume 메소드 내에서이를 확인하는 방법이 있어야합니까?

답변

2

활동은 onPause()가 호출 비 전경이된다. onResume()이 호출되면 작업이 포어 그라운드가됩니다.

http://developer.android.com/guide/components/activities.html#Lifecycle

한 가지 방법이 단편

설정하는 활동을하는 것입니다 전경에없는,에 연결되어 있는지, 활동 여부

을 찾을 수 활동의 onPause() 방법 isForeground = false 및 활동의 onResume() 방법 isForeground = true을 설정하고이를 만들기 위해 described here과 비슷한 콜백 인터페이스를 통해 프래그먼트에서 사용할 수있는 플래그. 유일한 차이점은 조각 이벤트를 활동으로 푸시하는 것입니다. 조각은 활동 상태를 읽습니다 (예 : SomeInterface.getForeground()).

또 다른 방법은 공공 방법 MyFragment.setForeground(boolean foreground)를 정의하고 onPause()onResume() 방법에서 활동 호출이 방법을 확인하는 것입니다.

+0

내가 필요로하는 것은 조각이 실제로 다시 시작하는지 여부를 알려주는 것입니다. 내가 말했듯이, 내가 설정 활동으로 활동을 변경하면, 현재 활동중인 활동이 아니더라도 주 활동에 속한 단편에서 onResume이 호출됩니다.이 경우, 프래그먼트가 실제로 다시 시작하지 않기 때문에 다시 시작하거나 일시 중지하십시오. 나는 활동이 배경에있을 때 이들이 호출되는 이유를 모르지만, 어쨌든, 콜백 내에서 프래그먼트 내에서 알릴 수있는 방법이 필요하다. –

+0

두 번째 방법을 살펴 보겠습니다. MainActivity.onPause()가 MyFragment.setForeground (false)를 호출하면 MyFragment.isParentInForeground가 false로 설정됩니다. 그런 다음 MyFragment.onResume()은 isParentInForeground가 true 또는 false인지 확인하고 결정을 내릴 수 있습니다. BTW, 조각이 백그라운드에있을 때 MyFragment.onPause/onResume이 호출되는 것은 정말 이상합니다. ( – Y2i

+0

Activity를 사용할 수 없습니다.이 라이브러리는 내가 원하는 작업에 조각을 주입하는 작은 라이브러리입니다. 나는 콜백이 인스턴스 유지 상태 때문에 호출된다고 생각한다. 좀 더 이상한 점은 클래스를 실행하고 백그라운드에서 onResume()에서 "this"부분을 구문 분석하면 Fragment.getActivity()가 null 인 것입니다.() 메소드 내에서 getActivity()를 호출하면 그렇지 않습니다. 그렇다면 현재 상태를 확인하기 위해 사용할 수 있습니다. –

1

그냥 활동의 기능 hasWindowFocus()를 사용합니다. 이것은 나를 위해 일했다. 그리고 그것을 사용하여 활동이 포커스로 돌아가고 플래그가 onResume()에 있는지 확인할 때 작업을 완료하기위한 플래그를 설정할 수 있습니다.

+0

질문에 대한 답변이 정확하지 않지만 현재 진행되지 않은 활동에서 뭔가를하고 싶지 않을 때 제게 도움이되었습니다. 호스트 응용 프로그램에서 트랙 상태를 소유하고 있지 않습니다. –