-
5分18秒,添加的fragment的id一定要和bottom_nav_manu表单中新添加的那个item的id一样啊!否则就无法跳转!(其实老师后面也强调了)
另外,如果运行时发现界面头上有个白色的留白,可以查看activity_main表单文件,把开头几行中的“android:paddingTop="?attr/actionBarSize"”删掉,这是模板自带的一个留白配置,删掉后就不会有那块白色了。
感谢DeepSeek帮忙排查问题,它是人类的好朋友~(ಥ _ ಥ)
查看全部 -
同上节课一样,由于kotlin-android-extensions 插件废弃,导致holder.itemView.item_image以及holder.itemView.item_title相关的代码全都失效,DeepSeek解释说:“holder.itemView.itemImage 是 kotlin-android-extensions 的语法糖,它本质上等价于 holder.itemView.findViewById<ImageView>(R.id.itemImage),但废弃插件后此功能已失效。直接通过 ID 访问视图的方式已被完全移除,必须显式绑定”。下面是它给出的代码。好耶!我好像明白view binding是怎么回事了!我可以举一反三啦!
inner class MyAdapter : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
// 使用 View Binding 的 ViewHolder
inner class MyViewHolder(private val binding: ItemViewLinearVerticalBinding) :
RecyclerView.ViewHolder(binding.root) {
// 直接通过 binding 访问视图
fun bind() {
binding.itemImage.setImageResource(R.drawable.icon_jetpack)
// 可以在这里添加语句,绑定其他控件
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
// 通过 Binding 类加载布局
val binding = ItemViewLinearVerticalBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
return MyViewHolder(binding)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.bind() // 调用 ViewHolder 的绑定方法
}
override fun getItemCount() = 20
}
查看全部 -
Kotlin1.4之后没有kotlin-android-extension插件了……官方建议使用View Binding。
直接写recycler_view.layoutManager又会报错,无奈问了DeepSeek,它给出了解决方案,编辑器确实没有报错了,但是代码同老师的差别就太大了。我暂时没有能力验证这种方案是否可以同接下来的课程内容兼容,先贴在这里:
class HomeFragment : Fragment(R.layout.fragment_home) {
// 定义 Binding 对象(根据布局文件名称自动生成)
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!! // 非空断言仅在 _binding 非空时使用
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
// 初始化 Binding
_binding = FragmentHomeBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 通过 binding 访问视图
binding.recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
// 其他代码(例如设置 Adapter)
}
override fun onDestroyView() {
super.onDestroyView()
// 清理 Binding 避免内存泄漏
_binding = null
}
}查看全部 -
index 不能超过集合size的大小 这个在java中一样的
查看全部 -
新版已带 material,无需再增加依赖
查看全部 -
课程源码
https://github.com/ThirdPrince/android2021
Kotlin扩展函数与实现机制探索
https://cloud.tencent.com/developer/article/1146533
查看全部 -
这个lambda隐形参数,怎么出现的?需要安装什么插件吗?
查看全部 -
老师 笔记麻烦分享下查看全部
-
有用
查看全部 -
JsonToKotlinClass 插件
查看全部 -
(一)具名参数
(有默认值的参数,不传的情况下,别的参数需要写清楚参数名=值)
read(1,2)
read(start = 2)
(二)重点:方法传参中传递方法
下图,read2方法中的第三个参数为一个方法 action:()->String
【这个参数名为action,action参数名后加了(),代表这个参数是一个方法】
【action后边的()里是这个方法的参数,String是这个方法的返回值】
【如果该方法没有返回值,则为Unit,写法action:()->Unit,代表无参无返回值】
(1)括号内传递action方法参数
在调用read2方法时,参数action,写法参数名 = {方法体}
read2(1,2,action = {
这个里边是action的方法体
最后一行代表这个方法的返回值
"read" //代表这个方法的返回值为read
}
)
(2)括号外传递方法参数(方法参数是参数的最后一个时才可这么写)
不需要写明action={},可以省略action=,直接在小括号的外边写{},{}里边代表这个action方法参数的方法体
(三)可变数量的参数 (vararg修饰的参数)传几个都行
只有一个参数可以被标记为vararg,当vararg不是最后一个参数时,别的参数传递时需要参数名=“”这样传递,用具名参数这样子传递,编辑器才能区分开
如下,world数组前加一个*星号键,就可以把world里的所有元素当做参数传递给append2
查看全部 -
(一)方法的定义:
fun 方法名 (参数列表):返回值{方法体}
参数列表:参数名 冒号 参数类型(多个参数用逗号隔开)
示例:fun getSize (num:Int , num2:Int):Int{}
(二)类的分类
普通类:用class声明
方法调用时,直接类名().方法名(不需要和java一样,不用new)
静态类:用object声明(工具类都用object声明)
方法调用时,直接类名.方法(静态类里都是静态方法,不需要构建实例对象)
伴生类:用处:当想要在普通类class声明的类里,定义静态方法的话,写在companion 里
使用:声明在普通类里边,
因为本来想要调用普通类里的方法时,必须类名().方法名
但是如果此方法在伴生类里,则可以直接类名.方法名(省去了构建实例对象)
如下,可直接Person.test() , 原本Person().test
class Person{
companion object{
fun test(){ }
}
}
(三)方法的参数解释
(1)默认参数:参数可设置默认值,可以减少方法重载的数量
(写默认值的参数可不传)
(2)具名参数
(3)可变数量的参数
查看全部 -
(一)kotlin中的集合分类
(1)list(有序且长度可变的列表(因可add,remove),通过get(index)获取某个下标的元素)
(2)set(无序,集合里元素唯一,不会有重复元素)
(3)map(键值对,键唯一,值可重复)
(二)集合的创建方式
(list,map,set分别的创建方式)
(三)集合的一些基本操作,常用的方法
(四)集合的一些变换操作
查看全部 -
数组的构造函数,it指数组的下⌚️
查看全部 -
psvm 快速生成main方法
显示声明 变量:类型 如 val intNumber:Int
查看全部 -
文档地址
http://8.136.122.222/book/primary/
查看全部
举报