从子片段访问父片段方法 [英] Access Parent Fragment method from Child Fragment
问题描述
我正在尝试从Map
片段访问位于父片段Tabs
中的myfunction()
.
I'm trying to access from Map
Fragment to myfunction()
situed in the Parent Fragment Tabs
.
我尝试了以下行Tabs parentFragment = (Tabs) getParentFragment();
,但是parentFragment为null.
I tried the following line Tabs parentFragment = (Tabs) getParentFragment();
however parentFragment is null.
我阅读了与此主题相关的所有主题,但没有一个对我有帮助...(也许在我误解了它们之后).
I read all topics concerning this subjects but none of them helped me... (after maybe I misunderstood them).
我有以下文件:
我要从其调用Parent方法的片段.
The Fragment from which I want to call the Parent method.
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()方法的父片段.
The Parent Fragment which contain the myfunction() method.
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
片段是制表符).
The TabsAdapter
(because Map
Fragment is a Tab).
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的新手,所以我有点迷路! 预先感谢您的帮助.
I relatively new to Android, so I'm a bit lost ! Thanks in advance for your help.
推荐答案
onCreateView
可能为时过早,尝试使用onViewCreated
或在最坏的情况下使用onStart
.
onCreateView
might be too early, try doing that onViewCreated
, or onStart
in the worst case.
这篇关于从子片段访问父片段方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!