簡體   English   中英

FragmentStatePagerAdapter沒有調用getItem()

[英]FragmentStatePagerAdapter is not calling getItem()

我已經看到了我的問題的相關帖子,但是,它並沒有解決我的問題。 我正試圖用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;
    }
}

最后顯示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;
    }
}

事實是,從不調用getItem()。 我嘗試通過getChildFragmentManager()更改getActivity()。getSupportFragmentManager(),但它似乎不是好方法...當我嘗試訪問我的按鈕時,我得到這個:

java.lang.NullPointerException:嘗試在空對象引用上調用虛方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)'

在我正在使用按鈕的行。

如果在片段內使用ViewPager,則必須使用chield fragment manager,因此請嘗試使用getChildFragmentManager()替換getActivity().getSupportFragmentManager() getChildFragmentManager() 如果您使用一個片段管理器來處理所有內容,它會給您帶來一些錯誤。

欲獲得更多信息

你在這里做錯了

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

設置適配器首先查看尋呼機,然后嘗試調用get item方法。

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

好吧,問題是我試圖訪問一個沒有膨脹的組件:

convKmhKts.setText("...");

我在子片段中訪問它,現在它沒關系....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM