我需要有关活动之间转换的帮助:
我有两个活动A和B,两个活动都有一个具有相同图像列表的ViewPager。每个页面都有一个ImageView,transitionName
等于 image_x ,其中 x 是页面索引。
A启动活动B调用ActivityOptionsCompat.makeSceneTransitionAnimation
并且输入转换完全正常。
问题如下:当我关闭活动B时,退出转换不会在B的相同位置初始化活动A的视图寻呼机。
当用户关闭B时,后者在结果中设置当前页面位置。在活动A的onActivityResult
中,我调用setCurrentItem
,行为显示在gif中。
有没有办法在退出转换开始之前更新活动A?
答案 0 :(得分:7)
如果您使用onActivityReenter
中的setCurrentItem
代替onActivityResult
Activity
A
,则应该可以实现这一目标强>)。
请确保你:
Activity
B
之前,请设置结果(使用setResult(int resultCode)
或setResult(int resultCode, Intent data)
)supportFinishAfterTransition()
(或finishAfterTransition()
)而不是常规finish()
来“关闭”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 :(得分:0)
我有解决方案。
1。创建可在两个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。从活动 B ,调用接口方法:
demoClass.getInstance().changePage(mFullscreenViewPager.getCurrentItem());
3. 从活动 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);
}
解释
当活动 B 更改页面时,向接口demoClass.demoInterface
报告事件demoClass.getInstance().changePage(index)
。这最终会调用Activity A 的方法changePage(int)
,我们会在旅途中更改ViewPager内容。
<强>结果强>
您可以在GIF here
查看输出