如何使用奇巧过渡框架何时实现backstack [英] How to implement a backstack when using the KitKat Transitions Framework
问题描述
我现在用的是新奇巧转换在Android API 。我创建使用两种布局两个场景
的对象。我是从动画场景1
到场景2
在片段
。我想自动移回previous 场景
当用户presses后退按钮。
I am using the new KitKat Transitions API on Android. I have created two Scene
objects using two layouts. I animate from Scene 1
to Scene 2
inside a Fragment
. I want to automatically move back to the previous Scene
when the user presses the back button.
有某种在使用转换
,内置backstack机制还是我必须推出自己的?
Is there some kind of built-in backstack mechanism when using Transitions
, or do I have to roll my own?
这是很容易调用 TransitionManager.go(SCENE1)
,但我真的不希望实施 onBack pressed( )
听众在我所有的片段具有场景
动画。
It is easy enough to call TransitionManager.go(scene1)
, but I really do not want to implement an onBackPressed()
listener in all my fragments that have Scene
animations.
推荐答案
我最终轧制我自己的解决方案。
I ended up rolling my own solution.
让你的活动
实现这个
public interface SceneBackstackHandler {
public void addBackstackListener(BackstackListener listener);
public void removeBackstackListener(BackstackListener listener);
public void removeAllBackstackListeners();
public interface BackstackListener {
public boolean onBackPressed();
}
}
活动
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();
}
}
儿童片段:
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;
}
}
这篇关于如何使用奇巧过渡框架何时实现backstack的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!