-
5分18秒,添加的fragment的id一定要和bottom_nav_manu表單中新添加的那個item的id一樣??!否則就無法跳轉(zhuǎn)?。ㄆ鋵嵗蠋熀竺嬉矎?qiáng)調(diào)了)
另外,如果運行時發(fā)現(xiàn)界面頭上有個白色的留白,可以查看activity_main表單文件,把開頭幾行中的“android:paddingTop="?attr/actionBarSize"”刪掉,這是模板自帶的一個留白配置,刪掉后就不會有那塊白色了。
感謝DeepSeek幫忙排查問題,它是人類的好朋友~(? _ ?)
查看全部 -
同上節(jié)課一樣,由于kotlin-android-extensions?插件廢棄,導(dǎo)致holder.itemView.item_image以及holder.itemView.item_title相關(guān)的代碼全都失效,DeepSeek解釋說:“holder.itemView.itemImage?是?kotlin-android-extensions?的語法糖,它本質(zhì)上等價于?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() // 調(diào)用 ViewHolder 的綁定方法
? ? }
? ? override fun getItemCount() = 20
}
查看全部 -
? ? Kotlin1.4之后沒有kotlin-android-extension插件了……官方建議使用View Binding。
? ? 直接寫recycler_view.layoutManager又會報錯,無奈問了DeepSeek,它給出了解決方案,編輯器確實沒有報錯了,但是代碼同老師的差別就太大了。我暫時沒有能力驗證這種方案是否可以同接下來的課程內(nèi)容兼容,先貼在這里:
class HomeFragment : Fragment(R.layout.fragment_home) {
? ?// 定義 Binding 對象(根據(jù)布局文件名稱自動生成)
? ?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)
? ? ? ?// 其他代碼(例如設(shè)置 Adapter)
? ?}
? ?override fun onDestroyView() {
? ? ? ?super.onDestroyView()
? ? ? ?// 清理 Binding 避免內(nèi)存泄漏
? ? ? ?_binding = null
? ?}
}查看全部 -
index 不能超過集合size的大小 這個在java中一樣的
查看全部 -
新版已帶 material,無需再增加依賴
查看全部 -
課程源碼
https://github.com/ThirdPrince/android2021
Kotlin擴(kuò)展函數(shù)與實現(xiàn)機(jī)制探索
https://cloud.tencent.com/developer/article/1146533
查看全部 -
這個lambda隱形參數(shù),怎么出現(xiàn)的?需要安裝什么插件嗎?
查看全部 -
老師 筆記麻煩分享下查看全部
-
有用
查看全部 -
JsonToKotlinClass 插件
查看全部 -
(一)具名參數(shù)
(有默認(rèn)值的參數(shù),不傳的情況下,別的參數(shù)需要寫清楚參數(shù)名=值)
read(1,2)
read(start = 2)
(二)重點:方法傳參中傳遞方法
下圖,read2方法中的第三個參數(shù)為一個方法 ?action:()->String
【這個參數(shù)名為action,action參數(shù)名后加了(),代表這個參數(shù)是一個方法】
【action后邊的()里是這個方法的參數(shù),String是這個方法的返回值】
【如果該方法沒有返回值,則為Unit,寫法action:()->Unit,代表無參無返回值】
(1)括號內(nèi)傳遞action方法參數(shù)
在調(diào)用read2方法時,參數(shù)action,寫法參數(shù)名 = {方法體}
read2(1,2,action = {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這個里邊是action的方法體
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 最后一行代表這個方法的返回值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "read" //代表這個方法的返回值為read
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? )
(2)括號外傳遞方法參數(shù)(方法參數(shù)是參數(shù)的最后一個時才可這么寫)
不需要寫明action={},可以省略action=,直接在小括號的外邊寫{},{}里邊代表這個action方法參數(shù)的方法體
(三)可變數(shù)量的參數(shù) (vararg修飾的參數(shù))傳幾個都行
? ? 只有一個參數(shù)可以被標(biāo)記為vararg,當(dāng)vararg不是最后一個參數(shù)時,別的參數(shù)傳遞時需要參數(shù)名=“”這樣傳遞,用具名參數(shù)這樣子傳遞,編輯器才能區(qū)分開
如下,world數(shù)組前加一個*星號鍵,就可以把world里的所有元素當(dāng)做參數(shù)傳遞給append2
查看全部 -
(一)方法的定義:
fun?方法名 (參數(shù)列表):返回值{方法體}
參數(shù)列表:參數(shù)名?冒號?參數(shù)類型(多個參數(shù)用逗號隔開)
示例:fun?getSize (num:Int ,?num2:Int):Int{}
(二)類的分類
普通類:用class聲明
? ? ? ? ? ? ? 方法調(diào)用時,直接類名().方法名(不需要和java一樣,不用new)
靜態(tài)類:用object聲明(工具類都用object聲明)
? ? ? ? ? ? ? 方法調(diào)用時,直接類名.方法(靜態(tài)類里都是靜態(tài)方法,不需要構(gòu)建實例對象)
伴生類:用處:當(dāng)想要在普通類class聲明的類里,定義靜態(tài)方法的話,寫在companion?里
? ? ? ? ? ? ? 使用:聲明在普通類里邊,
? ? ? ? ? ? ? ? ? ? ? ? ?因為本來想要調(diào)用普通類里的方法時,必須類名().方法名
? ? ? ? ? ? ? ? ? ? ? ? ?但是如果此方法在伴生類里,則可以直接類名.方法名(省去了構(gòu)建實例對象)
? ? ? ? ? ? ? ? ? ? ? ? ?如下,可直接Person.test()? ?, 原本Person().test
? ? ? ? ? ? ? ????????????class Person{
? ? ? ? ? ? ? ? ? ? ?????????????companion?object{
????????? ? ? ? ? ? ? ? ? ? ????????????fun?test(){ }
? ? ? ? ? ? ? ? ? ? ?????????????}
? ? ? ? ? ? ? ????????????? }
(三)方法的參數(shù)解釋
? ? ? ? ? ?
(1)默認(rèn)參數(shù):參數(shù)可設(shè)置默認(rèn)值,可以減少方法重載的數(shù)量
? ? ? ? ? ? ? ? ? ? ? ? ? ?(寫默認(rèn)值的參數(shù)可不傳)
(2)具名參數(shù)
(3)可變數(shù)量的參數(shù)
查看全部 -
(一)kotlin中的集合分類
(1)list(有序且長度可變的列表(因可add,remove),通過get(index)獲取某個下標(biāo)的元素)
(2)set(無序,集合里元素唯一,不會有重復(fù)元素)
(3)map(鍵值對,鍵唯一,值可重復(fù))
(二)集合的創(chuàng)建方式
(list,map,set分別的創(chuàng)建方式)
(三)集合的一些基本操作,常用的方法
(四)集合的一些變換操作
查看全部 -
數(shù)組的構(gòu)造函數(shù),it指數(shù)組的下??
查看全部 -
psvm 快速生成main方法
顯示聲明 變量:類型 如 val intNumber:Int
查看全部 -
文檔地址
http://8.136.122.222/book/primary/
查看全部
舉報