2017-10-08 7 views
1

Map 조각에서 myfunction()까지 조각에 액세스하려고합니다. 상위 단편 Tabs에 위치합니다.하위 조각의 부모 조각 메서드에 액세스하십시오.

Tabs parentFragment = (Tabs) getParentFragment(); 다음 줄을 시도했지만 parentFragment가 null입니다.

나는이 주제에 관한 모든 주제를 읽었지만 아무도 나를 도왔습니다 ... (어쩌면 내가 그들을 오해 한 후에).

조각 나는 부모의 메소드를 호출하려는 :

나는 다음과 같은 파일이 있습니다.

public class Map extends Fragment { 

View rootView; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    rootView = inflater.inflate(R.layout.map_fragment, container, false); 
    Tabs parentFragment = (Tabs) getParentFragment(); 
    parentFragment.myfunction(); 
    // it crash because parentFragment is null... 
    return rootView; 
    } 
} 

하여 myFunction() 메소드를 포함하는 상위의 조각.

public class Tabs extends Fragment { 
private View rootview; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
container, @Nullable Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    rootview = inflater.inflate(R.layout.tabs, container, false); 

    TabLayout tabLayout = (TabLayout) rootview.findViewById(R.id.tab_layout); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 3")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    final ViewPager viewPager = (ViewPager) rootview.findViewById(R.id.pager); 
    Context context = (HomeContainer)getContext(); 
    final TabsAdapter adapter = new TabsAdapter 
      (getActivity().getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    viewPager.setOffscreenPageLimit(3); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
    return rootview; 
} 

// the function I desire to call 
public void myfunction(){ 
} 

} 

TabsAdapter (Map 단편이기 때문에 탭) .

public class TabsAdapter extends FragmentStatePagerAdapter { 
int mNumOfTabs; 

public TabsAdapter(FragmentManager fm, int NumOfTabs) { 
    super(fm); 
    this.mNumOfTabs = NumOfTabs; 
} 

@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      Map tab1 = new Map(); 
      return tab1; 
     case 1: 
      Settings tab2 = new Settings(); 
      return tab2; 
     case 2: 
      Others tab3 = new Others(); 
      return tab3; 
     default: 
      return null; 
    } 
} 

@Override 
public int getCount() { 
    return mNumOfTabs; 
} 
} 

저는 비교적 안드로이드에 새로운 것이므로 약간 분실했습니다! 미리 도움을 주셔서 감사합니다.

답변

1

onCreateView이 너무 빠를 수도 있습니다. 최악의 경우 onViewCreated 또는 onStart을 시도해보십시오.

+0

방금 ​​시도했지만 여전히 동일한 오류가 발생했습니다 ... – Bobo159951

+1

또한 getSupportFragmentManager를 getChildFragmentManager로 교체하십시오. 이것이 바로 주요 문제입니다. – natario

+0

당신은 영웅입니다! 정말 고마워! – Bobo159951

0

onCreateView 이후에 넣고 인스턴스를 확인하는 것이 좋습니다.

Fragment parentFragment = getParentFragment(); 

    if(parentFragment instanceof Tab) { 
     ((Tab) parentFragment).myfunction(); 
    } 
+1

나는 불행하게도 여전히 아무것도 시도하지 않았다. 'parentFragment'는 여전히'null'이므로 결과적으로'myfunction()'이 실행되지 않습니다. – Bobo159951

관련 문제