2013-05-11 8 views
0

http://developer.android.com/training/basics/fragments/communicating.html의 예제를 기반으로, 더 큰 조각의 하위 단편 인 두 단편 사이의 통신을 재현하려고했습니다.안드로이드에서 프래그먼트 간의 통신

예에서, AB 활성은 A 단편 및 B 단편을 함유한다. 그러나 나는 동일한 것을 달성하려고 노력하고있다. 나의 경우에 AB 조각은 조각과 B 조각을 포함하고있다.

문제는 AB 조각에서 재정의 된 메서드가 호출되지 않는다는 것입니다. 예제에서와 같이 포함하는 구성 요소가 Fragment이고 Activity가 아니기 때문에 이것이 작동하지 않습니까? 내가 여기서 뭔가를 놓치고 있니?

+1

코드를 제공 할 수 있습니까? –

답변

2

onClick() 또는 다른 onSomething() 처리기를 말하는 경우이 부분은 항상 Activity 클래스에서 호출되며 조각이 아닙니다. 따라서 연결 한 예에서 onArticleSelected()은 중첩 된 조각이 있어도 Activity에 있어야합니다.

조각에 정보를 전달하려면 몇 가지 옵션이 있습니다. 하나는 활동 내의 단편에 대한 참조를 유지할 수 있습니다. 활동이 다시 생성되면 (예 : 설정 이벤트)이 내용이 손실 될 수 있습니다.

두 번째로 더 좋은 방법은 조각에 태그를 지정한 다음 findFragmentByTag을 사용하는 것입니다.

당신은 당신의 조각 (나는 조각에 준 태그입니다 매개 변수 "my_fragment"주의) 추가 할 때 :

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, myFragment, "my_fragment").commit(); 

을 또는 다른 하나 개의 조각을 교체 할 때 :

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment, "my_fragment").comit(); 

을 그런 다음 활동의 onArticleSelected 내에있는 조각에서 무언가를하고 싶을 때 :

Fragment fragment = getSupportFragmentManger().findFragmentByTag("my_fragment"); 
if (fragment != null) { 
    fragment.articleSelected(articleId); 
} 
+0

하지만 다시 (onArticleSelected()가 액티비티에 있다고 가정) 액티비티에서 다른 중첩 된 프래그먼트로 어떻게 통신합니까? 내가 생각하기에 올바른 방법으로 조각을 인스턴스화하십시오. 이미 인스턴스화 된 참조를 통해 중첩 된 단편의 메소드에 액세스해야합니다. – Jani

+0

지금 질문이 있습니다. 내 대답을 편집 할 것입니다. – tbkn23

+0

컨트롤에 전달 된 인터페이스를 추가하고 조각 참조를 유지하는 것은 레코드 일뿐입니다 ... 효과적인 솔루션 중 얼마나 많은 부분이 frag 참조가 포함되어 있는지 고려하고 있지 않지만 – Jani

0

언제든지 Interface을 사용하여 조각간에 통신 할 수 있습니다. 그렇게하는 것이 가장 안전한 방법입니다.