2017-11-06 2 views
0

부모와 자식간에 의사 소통을 원합니다 fragment. 나는 많은 게시물을 읽었으나 아무 게시물도 유용하지 않은 것 같습니다.중첩 된 조각 통신

나는 3 FragmentsFragmentA, FragmentBFragmentC입니다.

FragmentAFragmentBFragmentB 용 부모 fragment이다 FragmentC의 상위 Fragment이다.

FragmentA은 탭이 구현 된 및 viewpager과 함께 EditText입니다. FragmentB에는 Tabs가있는 Viewpager이 있습니다. (기본적으로는 중첩 탭을 사용하고 있지만 권장하지는 않지만 실제로이 시나리오를 사용해야합니다.) FragmentCrecyclerView입니다. 그러면 선택한 탭을 기반으로 한 제품 목록이 표시됩니다. 이것은 나를 위해 잘 작동합니다.

FragmentC에 검색 기능을 추가하고 싶습니다. (검색은 webservice에서 수행되고 webservice는 FragmentC에서 호출됩니다.

는 지금까지이며, FragmentA이 설정 viewpager 여기에 웹 응답에 기반합니다 수행 FragmentA에서 설정 viewpager하는 방법입니다 무슨이를 구현합니다. (코드는 내가 조각의 인스턴스를 얻는 방법을 말한다)

private void setupViewPager(ViewPager viewPager, RetailCategoryListArr retailCategoryListArr) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 
     for (int i = 0; i < retailCategoryListArr.getData().size(); i++) { 
      RetailerCategoryArr retailerCategoryArr = retailCategoryListArr.getData().get(i); 
      FragmentB FragB= FragmentB.newInstance(retailerCategoryArr, retailerArr.getUrlIdentifier()); 
      adapter.addFragment(FragB, retailerCategoryArr.getName()); 
     } 
     viewPager.setAdapter(adapter); 
     tabs.setupWithViewPager(viewPager); 
    } 

FragmentB은 또 다른 ViewPager을 가지고 있습니다.

private void setUpViewPager(ViewPager viewpager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 

     for (int i = 0; i < retailerCategoryArr.getChild().size(); i++) { 
      RetailerCategoryArr.RetailerSubCategoryArr retailerSubCategoryArr = retailerCategoryArr.getChild().get(i); 
      FragmentC FragC = FragmentC.newInstance(retailerSubCategoryArr.getId(), retailer); 
      adapter.addFragment(FragC, retailerSubCategoryArr.getName()); 

     } 
     viewpager.setAdapter(adapter); 
     tabs.setupWithViewPager(viewpager); 
    } 

그래서, 질문은 내가 FragmentC에서 FragmentAEdittexttextchange을들을 수있는 방법인가? 인터페이스로 가능하면 어떻게 할 수 있습니까? FragmentC에서

+0

https://developer.android.com/training/basics/fragments/communicating.html – Kuffs

+0

@Kuffs 답장을 보내 주셔서 감사합니다. 그러나 나는 이미이 글을 읽었으며, 이것이 나의 시나리오에서 어떻게 성취 될 수 있는지를 알지 못한다. 잠깐, 답을 적어주세요. –

+0

문서화 된 의사 소통 방식을 따르는 데 문제가있는 경우 질문을 편집하여 발생한 문제점을 정확히 설명하고 문제가 발생한 이유를 정확하게 설명해야합니다. 아무도 당신을 위해 문서를 복제하고 싶지 않습니다. – Kuffs

답변

0

이 작업을 수행하려고 :

Fragment frag = getParentFragment(); //it will be FragmentB 
FragmentA fragA = (FragmentA)frag.getParentFragment(); 
fragA.editText.addTextChangedListener(new TextWatcher() { 
    ... 
}); 
0

당신은 청취자에게

을 구현하는 부모 활동에서 조각 A.

interface Test{ 
     void setTextChange(String ch); 
    } 

에서 textwatcher 듣고 학부모 활동에 인터페이스와 구현을 할 수 있습니다

public class FragmenA extends Fragment{ 
    Test mCallback; 
    public Edittext; 


    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (Test) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement Test"); 
     } 
    } 


} 



public class MainActivity extends Activity 
       implements FragmentA.Test{ 

       Fragment fragmentc=getFragmentManager().findFragmentByTag(FragmentC.class); 



      public setTextChange(String ch) { 
        if(fragmentc!=null){ 

         fragmentc.onChangeText(ch); 
     } 
      } 
     } 


     public class FragmenC extends Fragment{ 
      Test mCallback; 


      public void onChangeText(String text){ 
     } 


     }