Android
发布于 2025年12月25日 01:04
更新于 2026年02月02日 19:04
Android一般用法
作者: Cable Fan
|
125 次阅读
Android一般用法
DataBinding布局初始化(填充):
Activity中:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding // DataBinding 自动生成的类
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 初始化 binding
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}
Fragment中:
class HomeFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false)
}
}
Room依赖三件套:
plugins {
alias(libs.plugins.devtools.ksp)
}
dependencies {
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
ksp(libs.androidx.room.compiler)
}
//版本信息定义:
[versions]
kotlin = "2.2.0"
ksp = "2.2.0-2.0.2"
roomRuntime = "2.7.0"
roomKtx = "2.7.0"
roomCompiler = "2.7.0"
[libraries]
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "roomCompiler" }
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomKtx" }
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" }
[plugins]
devtools-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
注意:ksp的版本号是x-y两段的,前面x段版本号要与kotlin的版本号一致。
kapt插件引用:
[versions]
kotlin = "2.2.0"
[plugins]
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
plugins {
alias(libs.plugins.kotlin.kapt)
}
注意:kapt插件的版本直接使用kotlin的版本,DataBinding仍然需要使用kapt插件。
过时代码升级替代
JvmTarget在新版本(AGP 8.x + Kotlin 2.x)之后的写法
//旧写法
kotlinOptions {
jvmTarget = "11"
}
//新写法
kotlin {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11)
}
}
2. OptionsMenu的写法
//旧写法(Fragment中)
class PlantListFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
//...其他代码
setHasOptionsMenu(true)
}
//配合代码
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_plant_list, menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.filter_zone -> {
updateData()
true
}
else -> super.onOptionsItemSelected(item)
}
}
}
//新写法(将所有代码写成一个函数放在onCreateView中调用)
private fun setOptionsMenu() {
val menuHost = requireActivity() as MenuHost
menuHost.addMenuProvider(
object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.menu_plant_list, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) {
R.id.filter_zone -> {
updateData()
true
}
else -> false
}
}
},
viewLifecycleOwner,
Lifecycle.State.RESUMED
)
}