从子片段访问父片段方法 [英] Access Parent Fragment method from Child Fragment

查看:146
本文介绍了从子片段访问父片段方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆