[英]getItem function calling twice in FragmentStatePagerAdapter?
[英]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.