【发布时间】:2020-09-08 20:55:24
【问题描述】:
我目前正在开发具有设置活动的应用程序。在这个 Activity 中,有一个 FrameLayout,用于加载 Settings Main 片段。
当我尝试使用包含 supportFragmentManager 的函数在活动的 onCreate 中加载片段时,我收到错误 Unable to start activity: java.lang.IllegalStateException: Fragment not attached to a context。奇怪的是,Android Studio 指向val frgSettingsMain = FragmentSettingsMain() 和DataItemsSettings。
我做错了什么?还有其他更简洁的方法可以在 onCreate 中初始化 Fragment 吗?
代码:
ActivitySettings.kt
class ActivitySettings : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
topToolbarBack.setNavigationOnClickListener {
finish()
}
val frgSettingsMain = FragmentSettingsMain()
setCurrentFragment(frgSettingsMain)
}
private fun setCurrentFragment(fragment: Fragment) =
supportFragmentManager.beginTransaction().apply {
replace(R.id.framelayoutSettings, fragment)
commit()
}
}
FragmentSettingsMain.kt
class FragmentSettingsMain : Fragment(), AdapterSettings.OnItemClickListener {
val 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 onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true
}
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 -> Toast.makeText(context, "Pressed Option 0", Toast.LENGTH_LONG).show()
1 -> Toast.makeText(context, "Pressed Option 1", Toast.LENGTH_LONG).show()
2 -> Toast.makeText(context, "Pressed Option 2", Toast.LENGTH_LONG).show()
3 -> Toast.makeText(context, "Pressed Option 3", Toast.LENGTH_LONG).show()
4 -> Toast.makeText(context, "Pressed Option 4", Toast.LENGTH_LONG).show()
5 -> Toast.makeText(context, "Pressed Option 5", Toast.LENGTH_LONG).show()
}
}
}
【问题讨论】:
标签: android kotlin android-fragments