如何在片段列表中找到特定片段?
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)
【讨论】:
以上是关于如何在片段列表中找到特定片段?的主要内容,如果未能解决你的问题,请参考以下文章
如何在文本区域标签中的特定光标位置插入选择标签下拉值作为文本片段?