Обновление исходной активности до перехода на выход
![введите описание изображения здесь]()
Мне нужна помощь в переходе между действиями:
У меня есть два действия A и B, и оба имеют ViewPager с тем же списком изображений. Каждая страница имеет ImageView с transitionName
равна image_x, где x индекс страницы.
A начинает действие B, вызывающее ActivityOptionsCompat.makeSceneTransitionAnimation
, и переход ввода полностью прекрасен.
Проблема заключается в следующем: когда я закрываю активность B, переход на выход не инициализирует пейджер представления активности A в том же положении B.
Когда пользователь закрывает B, последний устанавливает текущее положение страницы в результате. В onActivityResult
активности A я вызываю setCurrentItem
, и поведение показано в gif.
Есть ли способ обновить активность A до начала перехода на выход?
Ответы
Ответ 1
Вы должны сделать это, если используете setCurrentItem
в onActivityReenter
вместо в onActivityResult
(в Activity
A
).
Просто убедитесь, что вы:
Чтобы оформить лето:
в Activity
B
:
public void close(){
Intent data = new Intent();
data.putExtra(KEY_CURRENT_ITEM, mFullscreenViewPager.getCurrentItem());
setResult(RESULT_CODE, data);
supportFinishAfterTransition();
}
в 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);
}
}
Ответ 2
У меня есть решение.
1. Создать класс интерфейса, который работает между обоими операциями: 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. Из действия B, метод интерфейса вызова:
demoClass.getInstance().changePage(mFullscreenViewPager.getCurrentItem());
3. От Activity A, реализуйте интерфейс и зарегистрируйте интерфейс для прослушивания:
public class ActivityA extends Activity implements demoClass.demoInterface {
...
}
---------------------
demoClass.getInstance().setListener(ActivityA.this);
4. Внедрите метод changePage(int)
в A:
@Override
public void changePage(int which) {
mViewPager.setCurrentItem(page);
}
Объяснение
Когда активность B изменится на страницу, сообщите об этом событию в интерфейс demoClass.demoInterface
thorugh demoClass.getInstance().changePage(index)
. Это в конечном итоге вызовет метод changePage(int)
Activity A, и мы изменим содержимое ViewPager на ходу.
Результат
Вы можете проверить вывод на GIF здесь