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

将片段作为参数传递?

况弘新
2023-03-14

我有一个简单的方法,我想把片段名作为参数传递。我几乎没有像这样的碎片

1) AddNewDatesFragment

2) AskFragment

3)免责声明片段

我有下面的代码可以正常工作

FragmentManager fragmentManager = activity.getSupportFragmentManager();
    for (int entry = 0; entry < fragmentManager.getBackStackEntryCount();     entry++) {
    Fragment fragment = (Fragment)    fragmentManager.getBackStackEntryAt(entry);
        if (fragment instanceof AddNewDatesFragment) {
            Log.i("TAG", " Expected Fragment Found");
        }
    }

我想在方法中编写一些代码,在这里我可以调用这样的方法

        isExistFragment(AddNewDatesFragment);
        isExistFragment(AskFragment);
        isExistFragment(DisclaimerFragment);

我曾经尝试过这样的代码,但在if条件下不工作会导致编译时错误。

    private boolean isExistFragment(Class<Fragment> expectedFragment) {
    FragmentManager fragmentManager = activity.getSupportFragmentManager();
    for (int entry = 0; entry < fragmentManager.getBackStackEntryCount(); entry++) {
        Fragment fragment = (Fragment) fragmentManager.getBackStackEntryAt(entry);
        if (fragment instanceof expectedFragment) {
            Log.i("TAG", " Expected Fragment Found");
            return true;
        }
    }
    return false;
}

我对实施这种方法感到好奇。谢谢

共有3个答案

章烨烨
2023-03-14

你也许可以用:

expectedFragment.isAssignableFVrom(fragment.getClass())

如果例外片段类是片段类的接口或超类(参见doc),则这将是true

(注意:您不能在exceptedFragment上使用expectedFragment的片段实例,因为它是类而不是对象。)

从烈
2023-03-14

我不知道这是不是最好的办法。但我会使用标签特性来达到类似的目的。

添加片段时,请设置标记以供以后识别:

fragmentManager.beginTransaction()
               .replace(R.id.container, newlyAddFragment, TAG_FOR_THE_FRAGMENT)
               .commit();

并实现如下所示:

boolean isExistFragment(String tag) {
    Fragment targetFragment = fragmentManager.findFragmentByTag(tag);
    return targetFragment != null;
}
南宫才英
2023-03-14
getBackStackEntryAt(index) 

不返回片段本身,它返回受尊重片段的backbackbackentry对象。

请看一看http://developer.android.com/reference/android/app/FragmentManager.html#getBackStackEntryAt(国际)

使用以下代码段从堆栈中检索片段:

   Fragment fragment = (Fragment) fragmentManager
            .findFragmentById(fragmentManager.getBackStackEntryAt(entry)
                    .getId());

在这里,首先你得到BackStackEntry的受尊重的碎片,通过它,你会得到碎片的碎片ID在perticular位置。然后通过id你可以很容易地检索碎片。

 类似资料:
  • 我有一个片段a,包含一个片段B。 当片段A处于onActivityCreated生命周期中时,我想从片段A向片段B传递一个参数(因为我有一个来自viewmodel的数据,该数据此时到达)。 在我的片段B中,我无法得到这个论点。我有一个空异常。 你有办法解决我的问题吗? 这是我的代码 片段A 片段B fragment_a.xml

  • 问题内容: 我有以下代码: 但是我想将一个指向字节切片的指针传递给另一个函数,并在那里切片,所以类似: 它给我一个错误,我不能在函数参数中使用type 作为类型,并且不能对type进行切片。怎么了?默认情况下切片不是通过引用传递的吗?我试图在没有指针的情况下执行此操作,但是它不起作用- 正在复制数组。我怎样才能做到这一点? 问题答案: 该错误来自您尚未发布的拼写错误(您尝试传递一个切片而不是指向的

  • 问题内容: 如何在不执行“父”函数或不使用函数的情况下将函数作为参数传递?(因为我已经读到它是不安全的。) 我有这个: 它可以工作,但是问题是在调用函数时触发,而不是在函数中使用时触发。 根据我所读的内容,我可以使用来解决它,但这不是最佳实践。如何在JavaScript中将函数作为参数传递? 问题答案: 您只需要删除括号: 然后,这将传递函数而不先执行它。 这是一个例子:

  • 问题内容: 我可以将数组作为url参数传递的最佳方法是什么?我在想这是否可能: 还是这样: 香港专业教育学院阅读示例,但我发现它很混乱: 问题答案: 有一个非常简单的解决方案:。它把您的查询参数作为一个关联数组: 将返回 为您处理所有必需的转义(=> 和=> ),因此此字符串等于。

  • 问题内容: 我有3类调用,和。 在我的课程中,我想要一个这样的方法: 因此,例如,我想: 如何将类名作为参数,并基于该类名从类名创建适当的对象? 问题答案: 使用反射是可能的。这里是给定的className(作为字符串传递)。此类将在内存中搜索(应该已经加载)。 作为字符串传递时要实例化的类的名称应 完全限定

  • 问题内容: 我已经熟悉Android框架和Java,并希望创建一个通用的“ NetworkHelper”类,该类可以处理大多数联网代码,使我能够从中调用网页。 我遵循了来自developer.android.com的这篇文章来创建我的网络类:http : //developer.android.com/training/basics/network- ops/connecting.html 码: