我有一个设置屏幕,该屏幕具有一个FrameLayout,可加载包含RecyclerView的片段。 RecyclerView具有可选项目,这些可选项目由片段内的onItemClick函数处理。 目的是将当前打开的片段替换为另一个片段。
在onItemClick函数中是否可以替换当前片段?如果是这样,怎么办?
代码
用于处理RecyclerView和onItemClick函数的片段
g++ (GCC) 10.2.1 20200723 (Red Hat 10.2.1-1)
FrameLayout所在的活动
class FragmentSettingsMain : Fragment(), AdapterSettings.OnItemClickListener {
lateinit var settingsList: List<DataItemsSettings>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true
settingsList = listOf(
DataItemsSettings(getString(R.string.look), getString(R.string.lookdescription), R.drawable.ic_colored_color_lens),
DataItemsSettings(getString(R.string.playing), getString(R.string.playingdescription), R.drawable.ic_colored_view_carousel),
DataItemsSettings(getString(R.string.images), getString(R.string.imagesdscription), R.drawable.ic_colored_image),
DataItemsSettings(getString(R.string.audio), getString(R.string.audiodescription), R.drawable.ic_colored_volume_up),
DataItemsSettings(getString(R.string.other), getString(R.string.otherdescription), R.drawable.ic_colored_shape),
DataItemsSettings(getString(R.string.about), getString(R.string.aboutdescription), R.drawable.ic_colored_info)
)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.fragment_settings_main, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
rvSettings.apply {
layoutManager = LinearLayoutManager(activity)
adapter = AdapterSettings(settingsList, this@FragmentSettingsMain)
}
}
override fun OnItemClick(position: Int) {
when(position) {
0 -> //NEED TO REPLACE FRAGMENT HERE
1 -> //NEED TO REPLACE FRAGMENT HERE
2 -> //NEED TO REPLACE FRAGMENT HERE
3 -> //NEED TO REPLACE FRAGMENT HERE
4 -> //NEED TO REPLACE FRAGMENT HERE
5 -> this.startActivity(Intent(context, ActivityAbout::class.java))
}
}
}
答案 0 :(得分:2)
您可以尝试
override fun OnItemClick(position: Int) {
when(position) {
0 -> addContentFragment(yourFragment(),true)
1 -> //NEED TO REPLACE FRAGMENT HERE
2 -> //NEED TO REPLACE FRAGMENT HERE
3 -> //NEED TO REPLACE FRAGMENT HERE
4 -> //NEED TO REPLACE FRAGMENT HERE
5 -> this.startActivity(Intent(context, ActivityAbout::class.java))
}
}
fun addContentFragment(fragment: androidx.fragment.app.Fragment?, addToBackStack: Boolean) {
activity?.let {it->
if (!it.isFinishing) {
if (fragment == null) {
return
}
it.supportFragmentManager.let {it1->
val fragmentManager =it.supportFragmentManager
val currentFragment =
fragmentManager.findFragmentById(R.id.framelayoutSettings)
if (currentFragment != null && fragment.javaClass.isAssignableFrom(
currentFragment.javaClass
)
) {
return
}
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.add(
R.id.framelayoutSettings,
fragment,
fragment.javaClass.name
)
if (addToBackStack) {
fragmentTransaction.addToBackStack(fragment.javaClass.name)
}
fragmentTransaction.commit()
}
}
}
}