在退出转换之前更新源 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
(在您的 Activity
A
).
请确保您:
- 在完成
Activity
B
之前,设置结果(与setResult(int resultCode)
or setResult(int resultCode, Intent data)
)
- 调用
supportFinishAfterTransition()
(or finishAfterTransition()
) instead of regular finish()
到"close" Activity
B
.
求和:
在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);
}
}
我有解决办法。
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
检查输出
我需要有关活动之间转换的帮助:
我有两个 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
(在您的 Activity
A
).
请确保您:
- 在完成
Activity
B
之前,设置结果(与setResult(int resultCode)
orsetResult(int resultCode, Intent data)
) - 调用
supportFinishAfterTransition()
(orfinishAfterTransition()
) instead of regularfinish()
到"close"Activity
B
.
求和:
在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);
}
}
我有解决办法。
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
检查输出