在退出转换之前更新源 activity

Update source activity before exit transition

我需要有关活动之间转换的帮助:

我有两个 Activity A 和 B,并且都有一个具有相同图像列表的 ViewPager。每个页面都有一个 ImageView,transitionName 等于 image_x 其中x 是页面索引。

A 开始 activity B 调用 ActivityOptionsCompat.makeSceneTransitionAnimation 并且输入转换完全正常。

问题如下:当我关闭 activity B 时,退出转换不会在 B 的相同位置初始化 activity A 的视图分页器。

当用户关闭B时,后者在结果中设置当前页面位置。在 activity A 的 onActivityResult 中,我调用 setCurrentItem 并且行为显示在 gif 中。

有没有办法在退出转换开始前更新 activity A?

如果您在 onActivityReenter 中使用 setCurrentItem 而不是 onActivityResult(在您的 ActivityA).

请确保您:

  1. 在完成ActivityB之前,设置结果(与setResult(int resultCode) or setResult(int resultCode, Intent data)
  2. 调用supportFinishAfterTransition() (or finishAfterTransition()) instead of regular finish()到"close" ActivityB.

求和:

ActivityB:

public void close(){
    Intent data = new Intent();
    data.putExtra(KEY_CURRENT_ITEM, mFullscreenViewPager.getCurrentItem());
    setResult(RESULT_CODE, data);
    supportFinishAfterTransition();
}

ActivityA:

@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);
    }
}

我有解决办法。

1. 创建接口 class 在两者之间工作 Activity : 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.从ActivityB调用接口方法:

demoClass.getInstance().changePage(mFullscreenViewPager.getCurrentItem());

3. 从 Activity A 实现接口并注册监听接口:

public class ActivityA extends Activity implements demoClass.demoInterface {
...
} 
---------------------
demoClass.getInstance().setListener(ActivityA.this);

4.A 中实现 changePage(int) 方法:

@Override
public void changePage(int which) {
    mViewPager.setCurrentItem(page);
}

解释

当ActivityB改变页面时,通过demoClass.getInstance().changePage(index)向接口demoClass.demoInterface报告事件。这最终将调用 Activity A 的方法 changePage(int),我们将随时更改 ViewPager 内容。

结果

您可以在 GIF here

检查输出