Обновление исходной активности до перехода на выход

введите описание изображения здесь

Мне нужна помощь в переходе между действиями:

У меня есть два действия A и B, и оба имеют ViewPager с тем же списком изображений. Каждая страница имеет ImageView с transitionName равна image_x, где x индекс страницы.

A начинает действие B, вызывающее ActivityOptionsCompat.makeSceneTransitionAnimation, и переход ввода полностью прекрасен.

Проблема заключается в следующем: когда я закрываю активность B, переход на выход не инициализирует пейджер представления активности A в том же положении B.

Когда пользователь закрывает B, последний устанавливает текущее положение страницы в результате. В onActivityResult активности A я вызываю setCurrentItem, и поведение показано в gif.

Есть ли способ обновить активность A до начала перехода на выход?

Ответы

Ответ 1

Вы должны сделать это, если используете setCurrentItem в onActivityReenter вместо в onActivityResultActivity 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 здесь