【问题标题】:How do I find a specific fragment in a list of fragments?如何在片段列表中找到特定片段?
【发布时间】:2021-12-13 10:55:12
【问题描述】:

我有一个fragments 的列表,并希望根据作为参数传入的fragment type 找到一个特定的列表。有点像这样:

private fun findFragment(findFragment: Fragment): Fragment {
    fragments.forEach {
        if (it is findFragment) {
            return it
        }
    }
}

findFragment(MyFragment)

我不想发送实例,而是发送类型,如果列表中存在该类型,则应返回实例。我在 if (it is findFragment) 上收到一个错误,说未解决的参考 findMyFragment。

我该如何做到这一点?

【问题讨论】:

  • 您可以尝试使用 type 或类名并将其设置为片段的标记。然后你可以按标签搜索片段。在您的列表中或使用fragmentManager.findFragmentByTag(tag)

标签: android kotlin android-fragments arraylist


【解决方案1】:

第 1 步:

ft.replace(R.id.content_frame, fragment, **tag**).commit();

第 2 步:

FragmentManager fragmentManager = getSupportFragmentManager();
Fragment currentFragment = fragmentManager.findFragmentById(R.id.content_frame);

第三步:

if (currentFragment.getTag().equals(**"Fragment_Main"**))
{
 //Do something
}

【讨论】:

    【解决方案2】:

    这个错误是因为你的参数不是class,而只是一个变量。您不能将instanceof 或在本例中的is 用于另一个变量。

    在这种情况下,最接近的解决方案是使用片段的名称。像这样的:

        private fun findFragment(findFragment: String): Fragment? {
            val fragments = listOf<Fragment>()
            fragments.forEach {
                if (it.javaClass.simpleName == findFragment) {
                    return it
                }
            }
            return null
        }
    
    

    那么你就可以调用这个方法了:

    findFragment(MyFragment::class.java.simpleName)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多