重新加载片段,片段不要调用onCreateView

时间:2017-09-07 11:37:47

标签: java android android-fragments android-viewpager fragment

我有一个片段(C)和一个带有2个片段(A / B)的ViewPager(适配器)。 当我一次打电话给片段时,他们加载很好。 但是当我调用片段(C)的时间时,片段A和B不会调用View onCreateView方法并且没有加载。

使用Fragmetnmanger调用片段C:

FragmentC fragment = new FragmentC();
            getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.adressenmdf_detail_container, fragment).addToBackStack(null).commit();

片段C

 public BelegeDetails(){

}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.activity_belege_details, container, false);
    //TODO Actionbar noch anpassen
    //getSupportActionBar().setDisplayHomeAsUpEnabled(true);



    viewPager = (ViewPager) rootView.findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) rootView.findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    setupTabIcons(); 

Fragment C中的设置

    private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(this.getFragmentManager());

    adapter.addFragment(new BelegeDetails1(),"Details" );
    adapter.addFragment(new BelegeDetailsPos(), "Positionen");
    viewPager.setAdapter(adapter);
}
private void setupTabIcons() {
    tabLayout.getTabAt(1).setIcon(R.drawable.ic_belege);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);

    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

片段A BelegDetails1和片段B BelegDetailsPos是正常的片段类,如:

  public BelegeDetails1() {
    // Required empty public constructor

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}


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

1 个答案:

答案 0 :(得分:2)

尝试改变这一点:

ViewPagerAdapter adapter = new ViewPagerAdapter(this.getFragmentManager());

使用:

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());

在嵌套片段时,您需要使用getChildFragmentManager()代替getFragmentManager()