简体   繁体   English

无法为片段中的 Viewpager 调用 getSupportFragmentMangager

[英]Unable to call getSupportFragmentMangager for a Viewpager within a fragment

I am trying to place a ViewPager, which has several fragments as pages, inside a parent fragment.我正在尝试在父片段中放置一个 ViewPager,它有几个片段作为页面。

I see there are a few threads about this have have not found any that fix the issue I'm having.我看到有一些关于此的主题尚未找到任何解决我遇到的问题的方法。

I have tried the following: getFragmentManager getChildFragmentManager getActivity().getSupportFragmentManager (AppCompatActivity(getActivity())).getFragmentManager我尝试了以下方法: getFragmentManager getChildFragmentManager getActivity().getSupportFragmentManager (AppCompatActivity(getActivity())).getFragmentManager

While getActivity does work, then my other methods become "unreachable" and I have no idea why.虽然 getActivity 确实有效,但我的其他方法变得“无法访问”,我不知道为什么。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home, container, false);
    return view;

    initViews (view);
    Utils.getInstance(getActivity());

    CheckItemNull();


    myTabLO.addTab(myTabLO.newTab().setText("Tab 1"));
    myTabLO.addTab(myTabLO.newTab().setText("Tab 2"));
    myTabLO.addTab(myTabLO.newTab().setText("Tab 3"));
    myTabLO.addTab(myTabLO.newTab().setText("Tab 4"));
    myTabLO.addTab(myTabLO.newTab().setText("Tab 5"));
    myTabLO.setTabGravity(TabLayout.GRAVITY_FILL);



    myVPAdatper = new MyVPAdapter(getActivity().getSupportFragmentManager(), myTabLO.getTabCount());
    myVP.setAdapter(myVPAdatper);
    myVP.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(myTabLO));

    myTabLO.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            myVP.setCurrentItem(tab.getPosition());
        }

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

        }

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

        }

    });

Fragments require to be committed before they are able to appear.片段需要在它们能够出现之前被提交。

This is the basic structure of creating a Fragment这是创建Fragment的基本结构

FragmentManager fragmentManager = getSupportFragmentManager();
Fragment myFragment = fragmentManager.findFragmentById(R.id.my_fragment);

if(myFragment == null)
{
    myFragment = new MyFragment();
    fragmentManager.beginTransaction().add(R.id.my_fragment, myFragment).commit();
}

Hum, I'm still new to code, but i think the keyword from the method should be in the end of the code not in the beginning, because when the compiler read the code it finishes the process after reading the keyword "return" if the method has one.嗯,我还是新手,但我认为方法中的关键字应该在代码的末尾而不是开头,因为当编译器读取代码时,它会在读取关键字“return”后完成该过程 if该方法有一个。

I think that you are getting the fragmentManager wrong too.我认为您也弄错了 fragmentManager。 Instead of:代替:

getActivity().getSupportFragmentManager() getActivity().getSupportFragmentManager()

Use just!只用!

getSupportFragmentManager()获取支持片段管理器()

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

    View view = inflater.inflate(R.layout.fragment_home, container, false);

    initViews (view);
    Utils.getInstance(getActivity());

    CheckItemNull();


    myTabLO.addTab(myTabLO.newTab().setText("Tab 1"));
    myTabLO.addTab(myTabLO.newTab().setText("Tab 2"));
    myTabLO.addTab(myTabLO.newTab().setText("Tab 3"));
    myTabLO.addTab(myTabLO.newTab().setText("Tab 4"));
    myTabLO.addTab(myTabLO.newTab().setText("Tab 5"));
    myTabLO.setTabGravity(TabLayout.GRAVITY_FILL);


    myVPAdatper = new MyVPAdapter(getSupportFragmentManager(), myTabLO.getTabCount());

    myVP.setAdapter(myVPAdatper);

    myVP.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(myTabLO));

    myTabLO.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            myVP.setCurrentItem(tab.getPosition());
        }

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

        }

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

        }
       return view;
    });

GIVE A TRY!试一下!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM