java - tablayout - La conexión de fragmentos sueltos de Viewpager en memoria baja mata
viewpager con fragments (2)
en mi actividad uso viewpager Creo dos fragmentos y los adjunto al buscapersonas y de vez en cuando llamo a algunos métodos de estos fragmentos en mi actividad ... después de que la aplicación muera en memoria baja y los fragmentos vueltos a crear están allí pero no hay conexión con el visor de algún sitio ... puedo no llame a MyFragment.mymethod () .. dice MyFragment es nulo
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
if(position==0){
if(homeFragment==null){
homeFragment=new HomeFragment();
}
return homeFragment;
}else{
if(mapFragment==null){
mapFragment=new Map();
}
return mapFragment;
}
}
. . .
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id==R.id.action_search){
return true;
}else if(id==R.id.action_feedback){
}else if(id==R.id.action_rate_me){
}else if(id==R.id.action_show_favorites ){
if(mViewPager.getCurrentItem()!=0){
mViewPager.setCurrentItem(0);
}
homeFragment.populateListWithFavorites();
return true;
}else if(id==R.id.action_history){
if(mViewPager.getCurrentItem()!=0){
mViewPager.setCurrentItem(0);
}
homeFragment.populateListWithHistory();
return true;
}
return super.onOptionsItemSelected(item);
}
Encontré la solución ...
es como decir que las variables de mi fragmento en la actividad principal se borraron, así que ya no tengo conexión con los fragmentos. Lo que hice fue dentro de onAttach () uní mi fragmento a las principales variables de actividad nuevamente
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = activity;
((RestaurantActivityViewPager)mActivity).menuFragment=this;
}
public static MenuFragment newInstance(int sectionNumber) {
MenuFragment fragment = new MenuFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
Si obtienes tabFragment por este código
Fragment fragment = mPagerAdapter.getItem(position);
Causa ese error cuando hay poca memoria. Prueba con este
fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.rewards_viewpager + ":"+position);