android - getParentFragment()在ViewPager中返回null

时间:2014-12-14 17:19:46

标签: android android-fragments android-viewpager android-fragmentactivity android-support-library

我的主要活动中有一个ViewPager,当我选择一个标签时会显示一些Fragment。每个片段都包含一些按钮,当我点击其中一个片段时,它会用当前片段替换片段。 我做的是我构建了一个像Fragment容器一样的Fragment。 database_fragment_container.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
     android:id="@+id/database_fragment_container">
</LinearLayout>

DatabaseFragmentContainer.Java

public class DatabaseFragmentContainer extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.database_fragment_container, container, false);
        getFragmentManager().beginTransaction().replace(R.id.database_fragment_container, new DatabaseFragment()).commit();
        return view;
    }
}

我写了onClickListener当我点击DatabaseFragment中的按钮时,它获取父片段并用R.id.database_fragment_container替换另一个片段 DatabaseFragment.Java

public class DatabaseFragment extends Fragment {
    public static DatabaseFragmentContainer parentFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.database_fragment, container, false);
        ((CirculeButtonWithCaption)view.findViewById(R.id.raw_materials_button)).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                getParentFragment().getChildFragmentManager().beginTransaction().replace(R.id.database_fragment_container, new RawMaterialsFragment()).commit();
            }
        });
        return view;
    }

}

最后,它是我的FragmentPagerAdapter

public class MainActivityTabsPagerAdapter extends FragmentPagerAdapter {
    public MainActivityTabsPagerAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public Fragment getItem(int i) {
            switch (i) {
            case 0:
                return new DatabaseFragmentContainer();
            case 1:
                return new CostumerFragment();
            default:
                break;
            }
            return null;
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return 2;
        }
    }

问题在于,当我点击某个按钮时,NullPointerException会因getParentFragment()返回null而被抛出!我该怎么办?

P.S:我知道我的英语不好,我的问题有一些语法问题。但请轻轻编辑,不要提出我的问题[暂停]。我需要答案:D

2 个答案:

答案 0 :(得分:2)

我肯定为时已晚,但我遇到了同样的问题,我解决了它从FragmentManager的片段列表中获取父片段的引用。

XFragment xFragment = null;
for(Fragment fragment : getFragmentManager().getFragments()){
    if(fragment instanceof XFragment){
        xFragment = (XFragment) fragment;
        break;
    }
}

XFragment是要搜索的父片段。

这不是更快的方式,但我找不到另一种方式。

答案 1 :(得分:0)

问题似乎是您使用片段管理器添加片段,但随后在新片段内调用子片段管理器,因为它未被使用,所以它将为null。试着调用get fragment manager。