Estoy usando ViewPager para implementar deslizamiento en mi aplicación de Android. Sin embargo, me gustaría que se muestre el fragmento anterior cuando el usuario usa el botón Atrás en lugar de finalizar la actividad. ¿Hay alguna forma de hacer eso? Gracias SebastiánUsar backstack con ViewPager
Respuesta
Anulación de la funcionalidad de su Activity
:
public class Activity extends Activity
{
@Override
public void onBackPressed()
{
// do stuff
myFragment.onBackPressed();
}
}
public class Fragment extends Fragment
{
public void onBackPressed()
{
// do stuff
}
}
tuve un problema similar, esto es cómo lo resolví. Tenía un ViewPager con 6 fragmentos y quería hacer un seguimiento del historial de la página y poder usar el botón Atrás para navegar hacia atrás en el historial. Creo un objeto java.util.Stack<Integer>
, le agrego números de fragmento (excepto cuando utilizo el botón Atrás, ver más abajo), y anulo onBackPressed()
para hacer que aparezca el último fragmento visto en lugar de usar la pila posterior, cuando mi pila de historial no está vacía.
Desea evitar presionar elementos en la pila cuando presiona el botón Atrás, de lo contrario se quedará atascado entre dos fragmentos si continúa utilizando el botón Atrás, en lugar de salir finalmente.
Mi código:
MyAdapter mAdapter;
ViewPager mPager;
Stack<Integer> pageHistory;
int currentPage;
boolean saveToHistory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.container);
mPager.setAdapter(mAdapter);
mPager.setOffscreenPageLimit(5);
pageHistory = new Stack<Integer>();
mPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
if(saveToHistory)
pageHistory.push(Integer.valueOf(currentPage));
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
saveToHistory = true;
}
@Override
public void onBackPressed() {
if(pageHistory.empty())
super.onBackPressed();
else {
saveToHistory = false;
mPager.setCurrentItem(pageHistory.pop().intValue());
saveToHistory = true;
}
};
Tengo mismo problema y siga con este paso (editado mi respuesta --- Ciertamente funciona para mí, darle una oportunidad)
En la actividad donde hay 3 fragmentos en viewpager creo stack y push y pop data.
private Stack<Integer> stackkk;
private ViewPager mPager;
private int tabPosition = 0;
mTabLayout.setupWithViewPager(mPager);
mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tabPosition = tab.getPosition();
mPager.setCurrentItem(tab.getPosition());
// here i have add the data into the stack in each tab click, as at first it will always be null so i add 0 position
if (stackkk.empty())
stackkk.push(0);
if (stackkk.contains(tabPosition)) {
stackkk.remove(stackkk.indexOf(tabPosition));
stackkk.push(tabPosition);
} else {
stackkk.push(tabPosition);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tabPositionUnselected = tab.getPosition();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
y en el onBackPressed en la actividad,
//OnbackPress i have first taken out the last one as it already and
//selected by poping it out then only set to the pager.
@Override
public void onBackPressed() {
if (stackkk.size() > 1) {
stackkk.pop();
mPager.setCurrentItem(stackkk.lastElement());
} else {
}
}
la esperanza que esto puede ayudar o msg me.
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. –
@JaiprakashSoni gracias por la sugerencia. He editado mi respuesta. Espero que esto pueda ayudar a otros –
- 1. Android - Backstack al sustituir el fragmento en ViewPager
- 2. ¿Cómo usar Android ViewPager?
- 3. ClassNotFoundException Android con ViewPager
- 4. Usar vista o fragmento en ViewPager
- 5. Android Fragmento backStack tema
- 6. ViewPager con fragmentos - onPause(), onResume()?
- 7. Trabajando con ViewPager y Fragmentos
- 8. ViewPager Android con ImageView con zoom
- 9. Usando android.app.Fragment con ViewPager en Android 3.0+
- 10. ViewPager con FragmentPagerAdapter no muestra contenido
- 11. Fragmentar transacciones, barra de acciones y backstack
- 12. Cómo determinar fragmento restaurado de backstack
- 13. Por qué fragmento de cero en backstack
- 14. onCreateView no llamado con Fragment en ViewPager
- 15. Reemplazo de ViewPager con Fragment - Luego navegando hacia atrás
- 16. Cómo revertir animaciones de fragmentos en BackStack?
- 17. Android Eliminar Fragmento y ver desde BackStack
- 18. ViewPager dentro de ListView
- 19. ViewPager FragmentPagerAdapter Nullpointer
- 20. ViewPager programmatically scrolling
- 21. ViewPager dentro del fragmento
- 22. sin fin ViewPager androide
- 23. Android: Viewpager y FragmentStatePageAdapter
- 24. ViewPager con indicador sin la biblioteca de soporte de Android
- 25. ViewPager + reciclaje de vistas?
- 26. Cómo crear carrusel ViewPager?
- 27. SimpleCursorAdapter en un ViewPager
- 28. Android Viewholder for ViewPager
- 29. Android ViewPager dimensión
- 30. Desplazamiento Webview en Viewpager
perfecto, muchas gracias! – Sebastian