Las variables de miembro de fragmento que obtienen null cuando se accede en onPageSelected ()

Estoy usando FragmentPagerAdapter con FragmentActivity para crear Fragmentos de swipe-able.

Mi primer fragmento en ese pagerAdapter se parece a esto.

public class MySummaryFragment extends CommonFragment implements OnPageChangeListener { private Context mContext; private View mMyView; LinearLayout mDetailLayout; TextView mDateTxtView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { System.out.println("onCreateView() Market summary"); mMyView = inflater.inflate(R.layout.my_page_summary_fragment_layout, container,false); mDetailLayout = (LinearLayout)mMyView.findViewById(R.id.SummaryDetailLayout); mDateTxtView = (TextView) mMyView.findViewById(R.id.txtDate); Account_Id = AccountDetails.getInstance(mContext).getClientCodes().get(0); sendRequest(Account_Id); return mMyView; } @Override public void onPageSelected(int arg0) { System.out.println("inside onPageScrollStateChanged()"); System.out.println("mMyView is null ? = "+(mMyView==null)); mDateTxtView = (TextView) mMyView.findViewById(R.id.txtMarketSummaryDate); Account_Id = AccountDetails.getInstance(mContext).getClientCodes().get(0); mDateTxtView.setText(""); sendRequest(Account_Id); } } 

El problema aquí es que estoy recibiendo NullPointerException cuando deslizar hacia fuera a 5-6 fragmentos y volviendo al primer fragmento.

Cuando intento depurar, descubrí que

MMyView es nulo? = True

¿Porque?

Por favor, ayúdame.

Aquí está mi Fragmento contiene el FragmentPagerAdapter,

 public class MyPageDetailViewFragment extends CommonFragment { private View mView; Context mContext; OnPageChangeListener pageChangeListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.my_page_fragments, null); mContext = getActivity(); setHasOptionsMenu(false); setupSearchBarComponent(); PagerTabStrip pagerTabStrip = (PagerTabStrip)mView. findViewById(R.id.pager_title_strip); pagerTabStrip.setDrawFullUnderline(true); pagerTabStrip.setTabIndicatorColor(Color.BLACK); /** Getting a reference to the ViewPager defined the layout file */ ViewPager pager = (ViewPager) mView.findViewById(R.id.pager); /** Getting fragment manager */ FragmentManager fm = ((HomeScreenActivity)mContext).getSupportFragmentManager(); /** Instantiating FragmentPagerAdapter */ final MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm); pager.setAdapter(pagerAdapter); pager.setCurrentItem(0); pageChangeListener = new OnPageChangeListener() { @Override public void onPageSelected(int selectedIndex) { System.out.println("selectedIndex = "+selectedIndex); Object page = pagerAdapter.getItem(selectedIndex); if( page instanceof OnPageChangeListener){ ((OnPageChangeListener) page).onPageSelected(selectedIndex); } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }; pager.setOnPageChangeListener(pageChangeListener); return mView; // return super.onCreateView(inflater, container, savedInstanceState); } 

Y aquí está mi implementación MyFragmentPagerAdapter,

 public class MyFragmentPagerAdapter extends FragmentPagerAdapter { /** Constructor of the class */ public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } /** This method will be invoked when a page is requested to create */ @Override public Fragment getItem(int index) { System.out.println("getItem = "+index); Bundle data = new Bundle(); data.putInt("current_page", index + 1); CommonFragment fragment = getFragment(index); fragment.setArguments(data); return fragment; } public CommonFragment getFragment(int index) { CommonFragment fragment = null; if(fragment == null){ if(index == 0){ fragment = new MySummaryFragment(); }else if(index == 1){ fragment = new FragmentOne(); }else if(index == 4){ fragment = new FragmentFour(); }else if(index == 5){ fragment = new FragmentFive(); }else{ fragment = new MyFragment(); } } return fragment; } /** Returns the number of pages */ @Override public int getCount() { return titles.length; } @Override public CharSequence getPageTitle(int position) { return titles[position]; } } 

pagerAdapter.getItem(selectedIndex) crea realmente una nueva instancia del fragmento.

Ver esta respuesta: https://stackoverflow.com/a/23843743/1271907

Tienes que mantener una referencia al fragmento real.

Parece que está llamando al método incorrecto en el inflado.

Intente cambiar esta línea:

 mView = inflater.inflate(R.layout.my_page_fragments, null); 

a:

 mView = inflater.inflate(R.layout.my_page_fragments,container, null); 
  • Cómo actualizar dinámicamente el elemento TITLE del visor de vistas
  • GetItem (int) para devolver Listfragment en FragmentPagerAdapter
  • Adición dinámica de elementos a FragmentGridPagerAdapter
  • Android.support.v4.app.FragmentPagerAdapter no se puede aplicar a android.app.FragmentManager
  • ViewPager con FragmentPagerAdapter no se muestra
  • FragmentPagerAdapter Deslizar para mostrar ListView 1/3 Anchura de la pantalla
  • Desplazamiento no funciona en android ViewPager con FragmentPagerAdapter
  • Cómo implementar un ViewPager con diferentes Fragmentos / Layouts
  • ¿Cómo puedo pasar una variable a través de FragmentPagerAdapter a un fragmento?
  • Android que consigue el fragmento que está en FragmentPagerAdapter
  • IllegalStateException: No se puede cambiar la etiqueta del fragmento era android: switcher ahora android: switcher
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.