简体   繁体   English

FragmentStatePagerAdapter没有调用getItem()

[英]FragmentStatePagerAdapter is not calling getItem()

i have seen the relative post to my issue but, it's not solve my probleme. 我已经看到了我的问题的相关帖子,但是,它并没有解决我的问题。 I'm trying to get a swipe view with 3 fragment. 我正试图用3个片段获得滑动视图。 In the main fragment i have this: 在主要片段中我有这个:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View vue = inflater.inflate(R.layout.fragment_conversions, container, false);

    ConversionsPagerAdapter cPageAdapter = new ConversionsPagerAdapter(getActivity().getSupportFragmentManager());
    ViewPager vp = vue.findViewById(R.id.conversionsPager);
    cPageAdapter.getItem(0);
    vp.setAdapter(cPageAdapter);


   Button convKmhKts = (Button) vue.findViewById(R.id.convKmhKts);
   convKmhKts.setText("...");
...

Here is the class of my FragmentStatePagerAdapter: 这是我的FragmentStatePagerAdapter的类:

public class ConversionsPagerAdapter extends FragmentStatePagerAdapter{
    public ConversionsPagerAdapter(FragmentManager fm) {
        super(fm);
        Log.i("ARKA", "FragmentStatePagerAdapter CONSTRUCTOR");
    }

    @Override
    public Fragment getItem(int i) {
        return ConversionFragment.newInstance(i);
    }

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

And finnaly the Fragment which display the Tab: 最后显示Tab的Fragment:

public class ConversionFragment extends Fragment {
    public static final String ID_CONVERSION = "id_conversion";

    public static ConversionFragment newInstance(int pos) {
        ConversionFragment stf = new ConversionFragment();
        Bundle args = new Bundle();
        args.putInt("pos", pos);
        stf.setArguments(args);
        return stf;
    }


    public ConversionFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        // The last two arguments ensure LayoutParams are inflated
        // properly.

        Bundle args = getArguments();
        int idConversion = args.getInt(ID_CONVERSION);
        Log.i("idConversion", String.valueOf(idConversion));
        int idVue;

        switch (idConversion){
            case 0: idVue = R.layout.fragment_conversions_vitesse;
                break;
            case 1: idVue = R.layout.fragment_conversions_vitesse;
            default: idVue = R.layout.fragment_conversions_vitesse;
                break;
        }

        View rootView = inflater.inflate(idVue, null);
        return rootView;
    }
}

The fact is, the getItem() is never called. 事实是,从不调用getItem()。 I try to change getActivity().getSupportFragmentManager() by getChildFragmentManager(), but it seem it's not the good way... When i'm trying to acces my button i get this: 我尝试通过getChildFragmentManager()更改getActivity()。getSupportFragmentManager(),但它似乎不是好方法...当我尝试访问我的按钮时,我得到这个:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)'

At the line where i'm using the button. 在我正在使用按钮的行。

If you use ViewPager inside fragment you have to use chield fragment manager so try replace getActivity().getSupportFragmentManager() with getChildFragmentManager() . 如果在片段内使用ViewPager,则必须使用chield fragment manager,因此请尝试使用getChildFragmentManager()替换getActivity().getSupportFragmentManager() getChildFragmentManager() If you use one fragment manager for all stuff, it will bring some bugs to you. 如果您使用一个片段管理器来处理所有内容,它会给您带来一些错误。

For more information 欲获得更多信息

You are doing wrong here 你在这里做错了

cPageAdapter.getItem(0);
vp.setAdapter(cPageAdapter);

Set adapter to view pager first and then try to call get item method. 设置适配器首先查看寻呼机,然后尝试调用get item方法。

vp.setAdapter(cPageAdapter);
cPageAdapter.getItem(0);

Ok, the probleme was that i try to acces a component which is not inflated: 好吧,问题是我试图访问一个没有膨胀的组件:

convKmhKts.setText("...");

I acces to it in the child fragment and now it's ok.... 我在子片段中访问它,现在它没关系....

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

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