-
5分18秒,添加的fragment的id一定要和bottom_nav_manu表單中新添加的那個(gè)item的id一樣?。》駝t就無法跳轉(zhuǎn)?。ㄆ鋵?shí)老師后面也強(qiáng)調(diào)了)
另外,如果運(yùn)行時(shí)發(fā)現(xiàn)界面頭上有個(gè)白色的留白,可以查看activity_main表單文件,把開頭幾行中的“android:paddingTop="?attr/actionBarSize"”刪掉,這是模板自帶的一個(gè)留白配置,刪掉后就不會(huì)有那塊白色了。
感謝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ì)上等價(jià)于?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又會(huì)報(bào)錯(cuò),無奈問了DeepSeek,它給出了解決方案,編輯器確實(shí)沒有報(bào)錯(cuò)了,但是代碼同老師的差別就太大了。我暫時(shí)沒有能力驗(yàn)證這種方案是否可以同接下來的課程內(nèi)容兼容,先貼在這里:
class HomeFragment : Fragment(R.layout.fragment_home) {
? ?// 定義 Binding 對(duì)象(根據(jù)布局文件名稱自動(dòng)生成)
? ?private var _binding: FragmentHomeBinding? = null
? ?private val binding get() = _binding!! // 非空斷言僅在 _binding 非空時(shí)使用
? ?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的大小 這個(gè)在java中一樣的
查看全部 -
新版已帶 material,無需再增加依賴
查看全部 -
課程源碼
https://github.com/ThirdPrince/android2021
Kotlin擴(kuò)展函數(shù)與實(shí)現(xiàn)機(jī)制探索
https://cloud.tencent.com/developer/article/1146533
查看全部 -
這個(gè)lambda隱形參數(shù),怎么出現(xiàn)的?需要安裝什么插件嗎?
查看全部 -
老師 筆記麻煩分享下查看全部
-
有用
查看全部 -
JsonToKotlinClass 插件
查看全部 -
(一)具名參數(shù)
(有默認(rèn)值的參數(shù),不傳的情況下,別的參數(shù)需要寫清楚參數(shù)名=值)
read(1,2)
read(start = 2)
(二)重點(diǎn):方法傳參中傳遞方法
下圖,read2方法中的第三個(gè)參數(shù)為一個(gè)方法 ?action:()->String
【這個(gè)參數(shù)名為action,action參數(shù)名后加了(),代表這個(gè)參數(shù)是一個(gè)方法】
【action后邊的()里是這個(gè)方法的參數(shù),String是這個(gè)方法的返回值】
【如果該方法沒有返回值,則為Unit,寫法action:()->Unit,代表無參無返回值】
(1)括號(hào)內(nèi)傳遞action方法參數(shù)
在調(diào)用read2方法時(shí),參數(shù)action,寫法參數(shù)名 = {方法體}
read2(1,2,action = {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這個(gè)里邊是action的方法體
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 最后一行代表這個(gè)方法的返回值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "read" //代表這個(gè)方法的返回值為read
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? )
(2)括號(hào)外傳遞方法參數(shù)(方法參數(shù)是參數(shù)的最后一個(gè)時(shí)才可這么寫)
不需要寫明action={},可以省略action=,直接在小括號(hào)的外邊寫{},{}里邊代表這個(gè)action方法參數(shù)的方法體
(三)可變數(shù)量的參數(shù) (vararg修飾的參數(shù))傳幾個(gè)都行
? ? 只有一個(gè)參數(shù)可以被標(biāo)記為vararg,當(dāng)vararg不是最后一個(gè)參數(shù)時(shí),別的參數(shù)傳遞時(shí)需要參數(shù)名=“”這樣傳遞,用具名參數(shù)這樣子傳遞,編輯器才能區(qū)分開
如下,world數(shù)組前加一個(gè)*星號(hào)鍵,就可以把world里的所有元素當(dāng)做參數(shù)傳遞給append2
查看全部 -
(一)方法的定義:
fun?方法名 (參數(shù)列表):返回值{方法體}
參數(shù)列表:參數(shù)名?冒號(hào)?參數(shù)類型(多個(gè)參數(shù)用逗號(hào)隔開)
示例:fun?getSize (num:Int ,?num2:Int):Int{}
(二)類的分類
普通類:用class聲明
? ? ? ? ? ? ? 方法調(diào)用時(shí),直接類名().方法名(不需要和java一樣,不用new)
靜態(tài)類:用object聲明(工具類都用object聲明)
? ? ? ? ? ? ? 方法調(diào)用時(shí),直接類名.方法(靜態(tài)類里都是靜態(tài)方法,不需要構(gòu)建實(shí)例對(duì)象)
伴生類:用處:當(dāng)想要在普通類class聲明的類里,定義靜態(tài)方法的話,寫在companion?里
? ? ? ? ? ? ? 使用:聲明在普通類里邊,
? ? ? ? ? ? ? ? ? ? ? ? ?因?yàn)楸緛硐胍{(diào)用普通類里的方法時(shí),必須類名().方法名
? ? ? ? ? ? ? ? ? ? ? ? ?但是如果此方法在伴生類里,則可以直接類名.方法名(省去了構(gòu)建實(shí)例對(duì)象)
? ? ? ? ? ? ? ? ? ? ? ? ?如下,可直接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(有序且長(zhǎng)度可變的列表(因可add,remove),通過get(index)獲取某個(gè)下標(biāo)的元素)
(2)set(無序,集合里元素唯一,不會(huì)有重復(fù)元素)
(3)map(鍵值對(duì),鍵唯一,值可重復(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/
查看全部
舉報(bào)