Android
发布于 2025年12月25日 01:04 更新于 2026年02月02日 19:04

Android一般用法

作者: Cable Fan | 125 次阅读


Android一般用法



 



DataBinding布局初始化(填充):




  1. 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)
}
}




  1. 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插件。



过时代码升级替代




  1. 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
)
}


文章ID: 3 | 状态: 已发布