gpt4 book ai didi

android - 使用 KitKat Transitions Framework 时如何实现后退堆栈

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:37 24 4
gpt4 key购买 nike

我正在使用新的 KitKat Transitions Android 上的 API。我使用两种布局创建了两个 Scene 对象。我在 Fragment 中制作了从 Scene 1Scene 2 的动画。我想在用户按下后退按钮时自动返回到上一个 Scene

使用 Transitions 时是否有某种内置的后台机制,还是我必须自己动手?

调用 TransitionManager.go(scene1) 很容易,但我真的不想在所有具有 场景动画。

最佳答案

我最终推出了自己的解决方案。

让你的Activity实现这个

public interface SceneBackstackHandler {

public void addBackstackListener(BackstackListener listener);

public void removeBackstackListener(BackstackListener listener);

public void removeAllBackstackListeners();

public interface BackstackListener {
public boolean onBackPressed();
}
}

Activity

private final Object mBackstackListenerLock = new Object();
private List<BackstackListener> mBackstackListeners = new ArrayList<>();

@Override
public void onBackPressed() {
synchronized (mBackstackListenerLock) {
for (BackstackListener mBackstackListener : mBackstackListeners) {
if (mBackstackListener.onBackPressed()) {
// handled by fragment
return;
}
}
super.onBackPressed();
}
}

@Override
protected void onPause() {
super.onPause();
removeAllBackstackListeners();
}

@Override
public void addBackstackListener(BackstackListener listener) {
synchronized (mBackstackListenerLock) {
mBackstackListeners.add(listener);
}
}

@Override
public void removeBackstackListener(BackstackListener listener) {
synchronized (mBackstackListenerLock) {
mBackstackListeners.remove(listener);
}
}

@Override
public void removeAllBackstackListeners() {
synchronized (mBackstackListenerLock) {
mBackstackListeners.clear();
}
}

子 fragment :

public class MySceneFragment extends Fragment
implements SceneBackstackHandler.BackstackListener {

private Scene mCurrentScene;

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mBackstackHandler = (SceneBackstackHandler) activity;
mBackstackHandler.addBackstackListener(this);
}

@Override
public void onDetach() {
super.onDetach();
mBackstackHandler.removeBackstackListener(this);
}

@Override
public boolean onBackPressed() {
if (mCurrentScene != null && mCurrentScene.equals(mMyScene)) {
removeMyScene();
return true;
}
return false;
}

private void changeScene(Scene scene) {
TransitionManager.go(scene);
mCurrentScene = scene;
}
}

关于android - 使用 KitKat Transitions Framework 时如何实现后退堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22975853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com