java - Android getParentFragment() 在 fragment 内的 ViewPager 中返回 null

标签 java android android-fragments nullpointerexception android-viewpager

我有一个 Activity,它包含一个带有 ViewPagerFragment。然后我在 ViewPager 中调用一个 Fragment 的方法。但是,如果该 fragment 随后调用 getParentFragment(),它将返回 null。

为什么 getParentFragment() 为空?


包含 ViewPager 的主要 fragment :

public class MyFragment extends Fragment {
    private TabLayout mTabLayout;
    private ViewPager mViewPager;
    private ViewPagerAdapter mAdapter;

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        View view = getView();

        // Setup the ViewPager
        mViewPager = (ViewPager) view.findViewById(R.id.container);

        ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager(), getActivity());
        mViewPager.setAdapter(adapter);
        //setupViewPager(mViewPager);

        // Setup the TabLayout
        mTabLayout = (TabLayout) view.findViewById(R.id.tabs);
        mTabLayout.setupWithViewPager(mViewPager);
    }

    // This method is called from Activity.
    public void callNestedFragment() {
        if (isDetached()) {
            return;
        }

        // This fragment cannot be null, because it doesn't crash here. (this is just a sample).
        ((Fragment0) mViewPager.getItem(0)).testMethod();
    }
}

嵌套 fragment (在 mViewPager 内):

public class Fragment0 extends Fragment {

    ...

    public void testMethod() {
        if (isDetached()) {
            return;
        }

        // Why is getParentFragment() null? This is the log: "Parent fragment: null"
        Log.i(TAG, "Parent fragment: " + getParentFragment());
        return;
    }
}

ViewPagerAdapter:

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private Context mContext;

    public ViewPagerAdapter(FragmentManager manager, Context context) {
        super(manager);
        mContext = context;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new Fragment0();
            case 1:
                return new Fragment1();
            case 2:
                return new Fragment2();
            case 3:
                return new Fragment3();
            case 4:
                return new Fragment4();
        }

        return null;
    }

    @Override
    public int getCount() {
        return 5;
    }
}

如果需要更多代码,请告诉我。感谢您的帮助。

最佳答案

在我的例子中,我使用的是 FragmentManager 而不是导致此问题的 ChildFragmentManager。

关于java - Android getParentFragment() 在 fragment 内的 ViewPager 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40206117/

相关文章:

java - 从 `startActivityForResult` 内以 `onClickListener` 开始的 Android Activity 返回字符串返回 null

java - 浏览器无法连接 spring4 websocket 服务器

android - 异常处理异步线程队列java.lang.UnsupportedOperationException

java - 我得到 java.lang.StackOverflowError : stack size 8MB when i draw my canvas

android - 在 fragment 中按回时列表会加倍

android API TabActivity 弃用

java - Spring MongoDB 进程/线程泄漏

java - Effective Java : is the example correct? 中的第 9 项(等于契约(Contract))

java - C# 获取扩展基类的类列表

android - 实现 HTML 书状分页