gpt4 book ai didi

android - 从子 fragment 访问父 fragment 方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:50 26 4
gpt4 key购买 nike

我正在尝试从 Map fragment 访问位于父 fragment Tabs 中的 myfunction()

我尝试了以下行 Tabs parentFragment = (Tabs) getParentFragment(); 但是 parentFragment 为空。

我阅读了有关该主题的所有主题,但没有一个对我有帮助...(也许我误解了它们)。

我有以下文件:

我想从中调用 Parent 方法的 Fragment。

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() 方法的父 fragment 。

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 fragment 是一个 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 比较陌生,所以我有点迷茫!预先感谢您的帮助。

最佳答案

我建议您将 is 放在 onCreateView 之后并检查实例。

 Fragment parentFragment = getParentFragment();

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

关于android - 从子 fragment 访问父 fragment 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com