FragmentStatePagerAdapter没有调用getItem()方法

3

我看到了与我的问题相关的帖子,但它没有解决我的问题。 我正在尝试使用3个片段创建一个滑动视图。 在主片段中,我有以下内容:

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("...");
...

这是我的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;
    }
}

最后是显示选项卡的片段(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;
    }
}

事实上,getItem()从未被调用。 我尝试通过getChildFragmentManager()更改getActivity().getSupportFragmentManager(),但似乎这不是正确的方法... 当我试图访问我的按钮时,我得到了以下错误: java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' 出错行是我使用按钮的那一行。
3个回答

2
如果您在片段中使用ViewPager,则必须使用子片段管理器,因此请尝试将getActivity().getSupportFragmentManager()替换为getChildFragmentManager()。如果您为所有内容使用一个片段管理器,则会引起一些错误。

更多信息


谢谢您的回答。我已经尝试过了,但是我仍然遇到了同样的问题:ChildManager出现了空指针异常... - Arka-57

0

好的,问题在于我试图访问一个未充气的组件:

convKmhKts.setText("...");

我在子片段中访问它,现在没问题了....


0

你在这里做错了

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

将适配器设置为查看ViewPager,然后尝试调用getItem方法。

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

嗨,谢谢你的回答。这只是一个测试,我忘记删除这行代码了,但我会尝试你的想法。 - Arka-57

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接