相关疑难解决方法(0)

如何在Fragments中实现onBackPressed()?

有没有一种方法可以onBackPressed()在Android Fragment中实现类似于我们在Android Activity中实现的方式?

正如Fragment生命周期所没有的那样onBackPressed().有没有其他替代方法来覆盖onBackPressed()Android 3.0碎片?

android android-fragments onbackpressed

422
推荐指数
28
解决办法
41万
查看次数

理解片段backstack

所以,有一些类似的问题,但我没有找到解决这个问题的单一问题.在官方Android文档似乎直观,但是当我实现与更复杂的工作流应用程序,碎片堆栈中变得混乱和怪异的东西开始发生.我为简单的应用程序开发了一个框架,其中包含单个活动的概念,可以通过其片段访问它以启动其他片段.我就这样做了:

1-让我的主要活动实现一个名为"FragmentDelegate"的界面

public interface FragmentDelegate {
    public void startFragment(CCFragment fragment, boolean addToBackStack);
}
Run Code Online (Sandbox Code Playgroud)

2- startFrargment方法的实现:

@Override
public void startFragment(CCFragment fragment, boolean addToBackStack) {

    FragmentManager fragmentManager = getSupportFragmentManager();

    fragment.setFragmentDelegate(this);
    FragmentTransaction fragmentTransaction = fragmentManager
            .beginTransaction();

    fragmentTransaction.setCustomAnimations(R.anim.slide_in_right,
            R.anim.slide_out_left, R.anim.slide_in_left,
            R.anim.slide_out_right);

    fragmentTransaction.replace(CONTENT_VIEW_ID, fragment,
            "callerFragmentClassName");
    if (addToBackStack)
        fragmentTransaction.addToBackStack("callerFragmentClassName");
    fragmentTransaction.commitAllowingStateLoss();

}
Run Code Online (Sandbox Code Playgroud)

关于这个很酷的是,我可以从任何片段调用:

mFragmentDelegate.startFragment(aNewFragment, addToBackStack);
Run Code Online (Sandbox Code Playgroud)

好了,现在想想以下案例场景:

我用一个初始片段开始我的活动,让我们说片段A.从片段A,我调用Camera Activity获得结果.当结果到来时,我启动片段B(将A添加到backstack).从BI开始片段C 而不向后台堆叠添加B. 所以我们在backstack中有这个:

[A] [C]

如果我按下后退按钮,我会回到A.如果我重复这个过程,背板会搞砸,当我按下时,它会一次又一次地把我带到C片段......

我知道这很难理解(我更难解释,因为英语不是我的母语)但是如果有人可以向我解释一下android片段背板如何工作的,或者为应用程序提供某种骨架,会很好.

android android-fragments

12
推荐指数
1
解决办法
3733
查看次数

标签 统计

android ×2

android-fragments ×2

onbackpressed ×1