2017-10-08 14 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(){ 
} 

} 

TabsAdapterMap断片はタブであるため)。

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; 
} 
} 

私はAndroidが比較的新しいので、少し失われています。 ご協力いただきありがとうございます。

答えて

1

onCreateViewが早すぎる可能性があります。最悪の場合はonViewCreatedまたはonStartとしてください。

+0

私は試してみました、まだ同じエラーが... – Bobo159951

+1

はまたgetChildFragmentManagerでgetSupportFragmentManagerを交換してください。それがここでの主な問題です。 – natario

+0

あなたは私の英雄です!本当にありがとう! – Bobo159951

0

onCreateViewの後に、インスタンスをチェックすることをお勧めします。

Fragment parentFragment = getParentFragment(); 

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

私は残念ながらまだ何も試してみました。 'parentFragment'はまだ' null'なので、 'myfunction()'は実行されません。 – Bobo159951

関連する問題