Alternativa para el onResume () durante la conmutación de fragmentos

onResume() no se llamará cuando cambiamos entre fragmentos más de una vez. Entonces, ¿hay alguna mejor manera de manejar la operación de reanudar?

El código sigue:

Paso 1

Crear interfaz :

 public interface YourFragmentInterface { void fragmentBecameVisible(); } 

Paso 2

Adjuntar Listner En setOnPageChangeListener :

 mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(final int position, final float v, final int i2) { } @Override public void onPageSelected(final int position) { YourFragmentInterface fragment = (YourFragmentInterface) mPagerAdapter.instantiateItem(mViewPager, position); if (fragment != null) { fragment.fragmentBecameVisible(); } } @Override public void onPageScrollStateChanged(final int position) { } }); 

Paso 3

Implementar interfaz en su fragmento :

 public class yourActivity extends SherlockFragment implements YourFragmentInterface{ @Override public void fragmentBecameVisible() { System.out.println("TestFragment"); } } 

Implementar este listner en todo el fragmento de fragmento yor fragmentBecameVisible fragmentBecameVisible() esta llamada de método durante el cambio de fragmentos.

Gracias.

Creo que he encontrado la respuesta. Aquí está el enlace que forzará onResume() del fragmento a ser llamado cada vez que el fragmento se vuelve visible.
Fragmentos onResume de la pila trasera

Usted podría hacer reanudar el trabajo por proporcionar un método public en cada fragment cuando la página seleccionada, te doy un ejemplo:

 public class MainActivity extends FragmentActivity { private TabHost mTabHost; private ViewPager mViewPager; private TabsAdapter mTabsAdapter; private ArrayList<Fragment> mFragments; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTabHost = (TabHost) findViewById(android.R.id.tabhost); mTabHost.setup(); mViewPager = (ViewPager) findViewById(R.id.pager); mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager); mFragments = new ArrayList<Fragment>(); mFragments.add(new TestFragment1()); mFragments.add(new TestFragment2()); mFragments.add(new TestFragment3()); mTabsAdapter.addTab(mTabHost.newTabSpec("fragment1").setIndicator("fragment1")); mTabsAdapter.addTab(mTabHost.newTabSpec("fragment2").setIndicator("fragment2")); mTabsAdapter.addTab(mTabHost.newTabSpec("fragment3").setIndicator("fragment3")); if (savedInstanceState != null) { mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("tab", mTabHost.getCurrentTabTag()); } private void refreshPage(int i) { Fragment fragment = mFragments.get(i); switch (i) { case 0: ((TestFragment1) fragment).refreshView(); break; case 1: ((TestFragment2) fragment).refreshView(); break; case 2: ((TestFragment3) fragment).refreshView(); break; } } class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener { private final Context mContext; private final TabHost mTabHost; private final ViewPager mViewPager; public TabsAdapter(FragmentActivity activity, TabHost tabHost, ViewPager pager) { super(activity.getSupportFragmentManager()); mContext = activity; mTabHost = tabHost; mViewPager = pager; mTabHost.setOnTabChangedListener(this); mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } public void addTab(TabHost.TabSpec tabSpec) { tabSpec.setContent(new DummyTabFactory(mContext)); mTabHost.addTab(tabSpec); notifyDataSetChanged(); } @Override public Fragment getItem(int i) { return mFragments.get(i); } @Override public void onPageScrolled(int i, float v, int i2) { } @Override public void onPageSelected(int i) { TabWidget widget = mTabHost.getTabWidget(); int oldFocusability = widget.getDescendantFocusability(); widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); mTabHost.setCurrentTab(i); widget.setDescendantFocusability(oldFocusability); refreshPage(i); } @Override public void onPageScrollStateChanged(int i) { } @Override public void onTabChanged(String s) { int postion = mTabHost.getCurrentTab(); mViewPager.setCurrentItem(postion, true); } @Override public int getCount() { return mFragments.size(); } class DummyTabFactory implements TabHost.TabContentFactory { private final Context mContext; public DummyTabFactory(Context context) { mContext = context; } @Override public View createTabContent(String s) { View v = new View(mContext); v.setMinimumWidth(0); v.setMinimumHeight(0); return v; } } } } 

Y luego escribes tu Fragment esta manera:

 public class TestFragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.main, container, false); } public void refreshView() { //do whatever you want } } 

Usted puede intentar esto,

Paso 1: Anule el método Tabselected en su actividad

 @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { // When the given tab is selected, switch to the corresponding page in // the ViewPager. try { if(MyEventsFragment!=null && tab.getPosition()==3) { MyEvents.fragmentChanged(); } } catch (Exception e) { } mViewPager.setCurrentItem(tab.getPosition()); } 

Paso 2: El uso de método estático hacer lo que quieras en tu fragmento,

 public static void fragmentChanged() { Toast.makeText(actvity, "Fragment Changed", Toast.LENGTH_SHORT).show(); } 

He resuelto este problema usando el método Override del fragmento:

  @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { if (getView() != null) { // your code goes here } } } 

Nota: En el primer fragmento de Viewpager setUserVisibleHint llamado before onCreateView por lo que necesita para manejar esto.

Handle setUserVisibleHint llamado before onCreateView in Fragment

Simplemente puede simular onResume () para cada fragmento usando una interfaz!

1- crear una interfaz llamada FragmentLifecycle, el código es el siguiente:

 public interface FragmentLifecycle { public void onResumeFragment(); } 

2- Deja que cada Fragmento implemente la interfaz:

 public class FragmentOne extends Fragment implements FragmentLifecycle 

3- Implementar métodos de interfaz en cada fragmento:

 @Override public void onResumeFragment() { Log.i(TAG, "onResumeFragment()"); Toast.makeText(getActivity(), "onResumeFragment():" + TAG,Toast.LENGTH_SHORT).show(); } 

4- Métodos de interfaz de llamada en el cambio de página de ViewPager:

 viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { FragmentLifecycle fragmentToShow = (FragmentLifecycle)adapter.getItem(position); fragmentToShow.onResumeFragment(); } }); 

¡Disfrutar!

  • Android: ejecuta el código onResume y onPause para todas las actividades de la aplicación?
  • Android onCreate onResume
  • Android - guardar / restaurar estado de fragmento
  • Android - ¿Cómo realizar un seguimiento de la aplicación Sólo se reanuda cuando sale y vuelve a la aplicación?
  • OnRestart () que se llama cuando se pulsa botón de nuevo, de alguna manera para evitar esto?
  • ¿Cómo quitar el foco del fragmento trasero de la pila?
  • Anular el método OnResume () de todas las actividades de Android
  • Error en el administrador de descargas android
  • Aplicación de Android / Actividad para empezar de nuevo Completamente cada vez que empieza o se reanuda?
  • Android: detención de actividad que no se reanuda
  • Uso de onResume () para actualizar la actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.