当前位置: 首页 > 知识库问答 >
问题:

片段事务和片段创建

夏侯楷
2023-03-14
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_holder);
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction().add(R.id.container, new Frag1(), "ZZZ").commit();
        }
    }
@Override
    public void bam(String s) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
        beginTransaction.replace(R.id.container, new Frag2());
        beginTransaction.addToBackStack(null);
        beginTransaction.commit();
    }

此时,Frag2在堆栈上,是唯一可见的片段。我使用了replace和addToBackStack,因为我需要后退导航。我的问题是,当我在Frag2内旋转屏幕时,活动中的super.oncreate(savedInstanceState)方法调用frag1的构造函数。

用户按下后退按钮之前,有没有什么方法可以避免调用Frag1的构造函数?

共有1个答案

雍志文
2023-03-14

您可以在清单文件中为活动设置属性,这样您的活动就不会在配置更改时被破坏,如下所示:

<activity
        android:name=".HomeActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustPan|adjustResize" >
    </activity>

Android:configchanges=“KeyboardHiddenOrientationScreensize”;这些是属性。

或者,在添加或替换碎片时,可以通过匹配碎片的标记来进行交叉检查。为此,您需要编写如下所述的代码:

    getFragmentManager().beginTransaction().add(R.id.container, new Frag1(), "TAG NAME").commit();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_holder);
    fragment1 = getSupportFragmentManager().findFragmentByTag("TAG NAME");
    if(fragment1 == null) { //if fragment null, then add fragment        
        getFragmentManager().beginTransaction().add(R.id.container, new Frag1(), "TAG NAME").commit();
    }
}
 类似资料:
  • 我在我的一个活动中使用了Android设计支持库中的BottomNavigationView,以及每个导航项的片段。 每次我在栏上选择一个项目时,我都会进行一个片段交易,就像下面的片段一样(为了简洁起见,删除了代码的某些部分): 问题是...底部栏动画变得超级滞后,只有在片段完全加载并显示在屏幕上后才会完成。 这个问题并不完全是新问题,因为在使用导航菜单时也会发生,但至少可以通过使用抽屉布局来解决

  • 我查看了一些教程,了解片段之间的动画事务。我用这种方法制作动画,效果很好: 但是我想反转这个动画:旧片段滑出到左边,新片段滑入到右边,但是文件的值似乎对我的作用域没有用处。 我怎么能做到呢?

  • 我有一个,它创建一个,然后这个创建另一个: 这让我想到。是否真的可以删除并转到? 提前感谢您的时间,我在网上找不到任何合适的信息!

  • YQL(简化): 结果(简化): 如何告诉Vespa从“计算机”而不是“de”创建代码段?

  • 在我的应用程序中,当点击导航抽屉上的不同项目时,我需要在片段之间切换。我为它创建了一个新方法DisplayFragment。代码如下: 它显示了错误的"片段元素在上面的行如下"错误的第二个参数类型找到android.support.v4.app.片段;需要android.app.片段;" 我试着改变从android的导入。支持v4.app。碎片到android。应用程序。碎片但它随后显示了Frag

  • MainActivity(扩展了fragmentActivity)有listview,它调用listviewadapter,其中有一个带有ViewpagerAdapter的ViewPager。现在,如果我需要在ViewPager中生成5个片段,如何将getFragmentManager()传递给适配器。 MainActivity[fragmentActivity]---->Listview----