android - usar - Actualizar la actividad de la fuente antes de la transición de salida
viewpager android medium (2)
Debería poder lograrlo si usa setCurrentItem
en setCurrentItem
en lugar de onActivityResult
(en su Activity
A
).
Sólo asegúrate de que:
- Antes de finalizar la
Activity
B
, establezca el resultado (ya sea consetResult(int resultCode)
osetResult(int resultCode, Intent data)
) - Llame a
supportFinishAfterTransition()
(ofinishAfterTransition()
) en lugar de regularfinish()
para "cerrar" laActivity
B
Para veranear:
en la Activity
B
:
public void close(){
Intent data = new Intent();
data.putExtra(KEY_CURRENT_ITEM, mFullscreenViewPager.getCurrentItem());
setResult(RESULT_CODE, data);
supportFinishAfterTransition();
}
en la Activity
A
:
@Override
public void onActivityReenter(int resultCode, Intent data) {
super.onActivityReenter(resultCode, data);
if (data.hasExtra(KEY_CURRENT_ITEM)){
mViewPager.setCurrentItem(data.getIntExtra(KEY_CURRENT_ITEM, 0), false);
}
}
Necesito ayuda sobre la transición entre actividades:
Tengo dos actividades A y B, y ambas tienen un ViewPager con la misma lista de imágenes. Cada página tiene un ImageView con el nombre de transitionName
es igual a image_x donde x es el índice de la página.
A inicia la actividad B llamando a ActivityOptionsCompat.makeSceneTransitionAnimation
y la transición de ingreso es totalmente correcta.
El problema es el siguiente: cuando cierro la actividad B, la transición de salida no inicializa el paginador de vista de la actividad A en la misma posición de B.
Cuando el usuario cierra B, este último establece la posición de la página actual en el resultado. En onActivityResult
de la actividad A, llamo setCurrentItem
y el comportamiento se muestra en el gif.
¿Hay alguna forma de actualizar la actividad A antes de que comience la transición de salida?
Tengo solución.
1. Crea una clase de interfaz que funcione entre ambas Actividad: demoClass.java
public class demoClass {
public static demoClass instance;
public demoInterface mCallback;
public static demoClass getInstance() {
if(instance == null) {
instance = new demoClass();
}
return instance;
}
public void setListener(demoInterface callback) {
this.mCallback = callback;
}
public void changePage(int which) {
if(this.mCallback != null) {
this.mCallback.changePage(which);
}
}
public interface demoInterface {
public void changePage(int which);
}
}
2. De la Actividad B , método de interfaz de llamada:
demoClass.getInstance().changePage(mFullscreenViewPager.getCurrentItem());
3. De la Actividad A , implementar la interfaz y registrar escuchar interfaz:
public class ActivityA extends Activity implements demoClass.demoInterface {
...
}
---------------------
demoClass.getInstance().setListener(ActivityA.this);
4. Implementar el changePage(int)
en A :
@Override
public void changePage(int which) {
mViewPager.setCurrentItem(page);
}
Explicacion
Cuando la Actividad B cambie de página, informe el evento a la interfaz demoClass.demoInterface
thorugh demoClass.getInstance().changePage(index)
. En última instancia, esto llamará al método changePage(int)
de la Actividad A y cambiaremos el contenido de ViewPager sobre la marcha.
Resultado
Puedes consultar la salida en GIF aquí