我基本上是尝试用一个按钮从另一个片段调用一个片段。我用supportFragmentManager
来实现这个。但是当我尝试使用它时,它给我
未解析的引用:支持片段管理器
错误。即使我添加了requireActivity().supportFragmentManager
,它也没有给我任何关于supportFragmentManager的错误,但这次有一个关于replace方法的错误。它给了我
类型不匹配:推断类型为FilterFragment,但应为Int
错误。我想从那个布局转到另一个布局。所以它必须是这个,但是当我把我的supportFragmentManager
转换成requireActivity().supportFragmentManager
时,它需要int。我不知道如何解决这个问题。
这是我的FilterFragment类,通过单击按钮转到ListFragment类
class FilterFragment : Fragment(R.layout.fragment_filter) {
private lateinit var fragment_list:ListFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
fragment_list= ListFragment()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btn_back.setOnClickListener {
loadFragment(fragment_list)
}
}
private fun loadFragment(fragment: Fragment){
val transaction = requireActivity().supportFragmentManager.beginTransaction()
transaction.replace(this, fragment)
transaction.disallowAddToBackStack()
transaction.commit()
}
}
和我的列表片段类
class ListFragment : Fragment(R.layout.fragment_list) {
object KEY {
const val KEY_NAVIGATOR = "NAVIGATOR"
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val bundle = this.arguments
if (bundle != null) {
val navigator : ListNavigator = bundle.getSerializable(KEY_NAVIGATOR) as ListNavigator
navigator.navigateFilter()
}
}
}
编辑:
在添加下面的代码后,我修复了这个错误。
private fun loadFragment(fragment: Fragment){
/* parentFragmentManager.beginTransaction().apply {
replace(fragmentContainerView.id,fragment,ListFragment::class.java.simpleName)
.addToBackStack(null).commit()
}*/
val transaction = getChildFragmentManager().beginTransaction()
transaction.add(fragmentContainerView.id, fragment)
transaction.disallowAddToBackStack()
transaction.commit()
Log.d("JUPITER","I AM HERE")
}
并且还将android:id="@+id/fragmentContainerView"
代码添加到我的fragment_filter.xml中
但是仍然不能很好地加载到我的片段。它看起来像下面。当我点击按钮时,它试图加载与第一个片段在同一页面的其他片段。The Situation which I face now
Before I click the button
1条答案
按热度按时间gywdnpxw1#
您必须使用childFragmentManager或parentFragmentManager,而不是supportFragmentManager,这取决于您的使用情况,因为您试图从另一个片段调用一个片段。
例如