2014-05-22 5 views
0

내 Acitivty에서는 사용자 데이터에 따라 조각 사이를 계속 전환합니다.프래그먼트 생성 후 조각 간 통신

지금 내가 가지고 말할 수 두 조각 & B.

이제

내가 조각 B와 현재의 단편을 대체하는 호스팅 활동을 호출 할 수있는 몇 가지 조건 단편시 B.

와 통신을 단편화합니다 (커밋 작업은 작업으로 예정되어 있음).

이제 frag A에서 frag B로 통신이 이루어 지길 원합니다. 그러나 frag B의 방법은 frag B의 전체 생성 과정을 필요로합니다. 비동기식으로 발생하기 때문에 언제 일어날 지 알 수 있습니다. 파편 A가

나는 간 조각 통신 주제 http://developer.android.com/training/basics/fragments/communicating.html을 확인했지만 그건 교체하는 방법에 대한 자세한입니다 상자의 파편 B에 도움이 후 파편 B.의 메소드를 호출 할 필요가 어디에서 그런 시나리오를 달성 할 수있는 방법

파편. 의사 소통이 일어날 수있는 방법에 대한 정보는 없습니다.

환호, Saurav 가능한 방법은 일반적인 인터페이스를 구현 조각을 모두 만들 수 있습니다

답변

0

글쎄 언제든지 getActivity() 액티비티로 가서 findFragmentByXyz()과 통신하려는 조각이 있는지 물어보고 자신의 스투 그것으로 ff (또는 아직 생성되지 않은 경우 생성).

준비가 완료되었을 때 (예 : UI가 준비되었을 때) 다른 단편과 통신한다는 것을 확인하려면 단편 B의 UI에 '실행 가능'을 게시하고 활동/단편을 알릴 수 있습니다 네가 준비되면 뭐든지.

getView().post(new Runnable() { 
    @Override 
    public void run() { 
     if (getActivity() != null) { // or whatever 
      registerComponents(); 
     } 
    } 
}); 
+0

덕분에이 솔루션은 나를 – saurav

+0

하지만 한 번 더 코멘트 근무 많은 UI를 준비하고 코드 내 이해가 정확한지 ... 비동기 실행을 위해 내가 기다리고 있기 때문에이 솔루션은 매우 느린 것입니다? – saurav

+0

글쎄, 당신의 요구 사항이 얼마나 시간이 중요한지는 모르겠지만, UI를로드하기를 기다리기에는 그렇게 오래 걸리지 않기 때문에 정상적인 사용에는 "느리게"되어서는 안됩니다. 복잡한 UI를 설정해야합니까? "느린"기능을 수행합니까? 아니면 왜 그렇게 생각하니? 보기에 Runnable을 게시하면 내부 UI 스레드 메시지 대기열에 새 메시지를 게시하는 것입니다. Runnable은 다른 모든 작업이 끝난 후에 실행됩니다. 나는. UI가 준비되었고 업데이트 할 수 있다는 것을 알고 있습니다. – einschnaehkeee

1

(의이 Subscriber를 부르 자). 인터페이스는 다음과 같을 것이다 :

public interface Subscriber { 
    void callMe();//to be used by the fragment who gets called 
    void theOtherFragmentIsReady(Subscriber sub);//to be used by the fragment that will perform the call. 
} 

이 단편은 다음의 방법에 추가 호스트 액티비티 : 조각의 onCreated() 메소드에서 마지막

public void fragmentCreated(Subscriber sub) { 
    Subscriber fragmentA = ...;//retrieve fragment A 
    fragmentA.theOtherFragmentIsReady(sub);//let the fragmentA that fragment B has been created 
} 

를 추가

public void onCreate() { 
    ((YourActivity)getActivity()).fragmentCreated(this); 
}