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.
- No se puede cambiar ID de contenedor de fragmento
- Intentar invocar método virtual 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler ()' en una referencia de objeto nulo
- Problemas con FragmentPagerAdapter
- Cómo obtener fragmentos existentes cuando se utiliza FragmentPagerAdapter
- ViewPager dentro de fragmento, cómo conservar el estado?
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]; } }
- Fragmento no añadido (fallo inconsistente)
- Android: limitar los fragmentos de carga con una viewPager
- Fragmentos de Viewpager y de Sherlock. ¿Cómo hacer somethng dentro de fragmento de FragmentActivity?
- Fragmento en ViewPager devuelve objeto vacío onResume
- Tengo un error extraño al usar un ViewPager dentro de un Fragmento
- Vinculación y desvinculación de Android Service a / de Fragment (en ViewPager)
- mantener instancias de fragmentos dentro de FragmentPagerAdapter
- Cambia dinámicamente el título de un android.support.v4.view.PagerTitleStrip
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);
- Mobs de anuncios o iAd?
- Limitaciones de SQLITE en Android – 25 tablas con 15 columnas cada una y 10k filas por tabla