退出转换前更新源活动

时间:2015-12-22 11:15:18

标签: android android-viewpager android-animation android-transitions

enter image description here

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

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

A启动活动B调用ActivityOptionsCompat.makeSceneTransitionAnimation并且输入转换完全正常。

问题如下:当我关闭活动B时,退出转换不会在B的相同位置初始化活动A的视图寻呼机。

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

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

2 个答案:

答案 0 :(得分:7)

如果您使用onActivityReenter中的setCurrentItem代替onActivityResult Activity A,则应该可以实现这一目标)。

请确保你:

  1. 在完成Activity B 之前,请设置结果(使用setResult(int resultCode)setResult(int resultCode, Intent data)
  2. 致电supportFinishAfterTransition()(或finishAfterTransition())而不是常规finish()来“关闭”Activity B
  3. 总结一下:

    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

查看输出