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

片段转换的正确方法

法和安
2023-03-14

我正在开发一个包含一个活动和多个片段的android应用程序。我的应用程序包含导航抽屉。它的布局包含listview。单击它的项目,我用ft.replace(R.id.my\u placehodler,new MyFragment())动态更改片段,并将事务添加到backstack ft.addToBackstack(null)。当我每次实例化新片段时都进行新事务。在我看来,这不是一个好办法。你能给我一些关于进行片段事务的正确方法的建议吗?

共有2个答案

洪弘壮
2023-03-14

如果要避免为同一个片段类实例化多个实例,即希望每个片段类有一个实例,则可以使用标记识别每个片段。

@Override
public void onNavigationDrawerItemSelected(int position) {
    String tag = "";
    switch (position) {
    case 0:
        tag = "fragment_0";
        break;
    case 1:
        tag = "fragment_1";
        break;
    case 2:
        tag = "fragment_2";
        break;
    }

    FragmentManager fragmentManager = getFragmentManager();
    Fragment fragment = fragmentManager.findFragmentByTag(tag);
    if (fragment == null) {
        // Only in case there is no already instaciated one,
        // a new instance will be instanciated.
        switch (position) {
        case 0:
            fragment = new Fragment_class_0();
            break;
        case 1:
            fragment = new Fragment_class_1();
            break;
        case 2:
            fragment = new Fragment_class_2();
            break;
        }
    }

    fragmentManager.beginTransaction().replace(R.id.container, fragment, tag).commit();
}
曾新
2023-03-14

只需调用一个setFragment(FragmentClassObject,false,“fragment”) 方法。

public void setFragment(Fragment fragment, boolean backStack, String tag) {
    manager = getSupportFragmentManager();
    fragmentTransaction = manager.beginTransaction();
    if (backStack) {
        fragmentTransaction.addToBackStack(tag);
    }
    fragmentTransaction.replace(R.id.content_frame, fragment, tag);
    fragmentTransaction.commit();
}
 类似资料:
  • 你好,堆栈溢出的好程序员!我已经花了一个星期的时间来解决这个问题,现在非常渴望一个解决方案。 我正在使用android。应用程序。不要将片段与支持片段混淆。 我有6个子片段名为: <代码>片段一 碎片二 碎片三 碎片a 碎片b 显示子片段<代码>片段A、<代码>片段B和<代码>片段C。 我正在尝试转换/设置父片段和子片段的动画。子片段平稳过渡,如预期。然而,当我转换到一个新的父片段时,它看起来很糟

  • 问题内容: 片段对于将UI逻辑分为一些模块来说似乎非常好。但是随着它的生命周期,我仍然迷茫。因此,非常需要大师的想法! 编辑 请参阅下面的愚蠢解决方案;-) 范围 主要活动有一个带有片段。这些片段可以为其他(子主)活动实现一些不同的逻辑,因此片段的数据通过活动内部的回调接口填充。并且所有功能在首次启动时都正常,但是! 问题 重新创建活动时(例如,在方向更改时),的片段也是如此。代码(您将在下面找到

  • 在使用VTD-XML解析包含特殊字符(如©的XML文档(UTF-8)时,我现在遇到了一个问题,即返回的元素片段(getElementFragment)不正确。 示例代码: 这将返回: 当更改标准字符集时。UTF_8转换为标准字符集。US\u ASCII它确实有效: 当输入文件是UTF-8文件时,这会导致不正确的行为。这可能是VTD-XML中的错误,还是我在这里做错了什么?

  • 我有一个包含多个按钮的活动,当单击一个按钮时,将打开一个包含两个片段的新活动。 我试图根据按下的按钮在其中一个片段中显示一个回收器视图。问题是捆绑包为空,所以回收器视图不显示。 捆绑包在<code>onAttach 碎片 公共类MyFragment扩展片段{

  • 问题内容: 这是我的代码: 当我运行此代码时,出现以下错误: 为什么会出现此错误? 我该如何解决? 正确的逆转方法是什么? 问题答案: 或者简单地: 将反转您的数据帧,如果您想使循环从下到上,则可以执行以下操作: 要么 因为你得到一个错误首先调用返回6,然后试图调用用于在和第一个电话会; 但在pandas数据框中表示第5列,而没有第5列,因此它将引发异常。(请参阅文档)

  • 问题内容: 我是Hibernate的新手,并且正在编写一个简单的方法来返回与特定过滤器匹配的对象列表。似乎是自然的回报类型。 不管我做什么,除非雇用了ugly,否则我似乎都无法使编译器满意。 我想摆脱它。但是如果我这样做,我会得到警告 (我可以忽略它,但是我不想一开始就得到它),如果我删除泛型以符合返回类型,则会收到警告 我注意到 确实 声明了;但它是完全不同的类型- 返回a 作为原始类型。我发现