-
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/
查看全部
舉報