如何在片段列表中找到特定片段?

Posted

技术标签:

【中文标题】如何在片段列表中找到特定片段?【英文标题】: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) 【参考方案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)

【讨论】:

以上是关于如何在片段列表中找到特定片段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在文本区域标签中的特定光标位置插入选择标签下拉值作为文本片段?

方向/配置更改后如何维护 ListView 片段状态?

如何在片段中使用按钮[关闭]

如何在 Android 中的特定片段容器中显示片段

如何在片段中使用 GetJsonFromUrlTask​​.java

根据字符串名称而不是列表视图项位置替换片段并启动活动