Kotlin學習載入豆瓣電影列表
-
隨著
Kotlin1.2.7
版本釋出Androidstudio3.2
穩定版本釋出,增加了更多的Kotlin
支援,是時候學習Kotlin -
學習看這個地址就行了,不懂的搜尋下就差不多了,ofollow,noindex">https://www.kotlincn.net/docs/reference/coroutines.html
-
我這篇不講語法看文件就可以,我大概磨磨唧唧看了3天文件,沒咋實地操作,只是看,所有才有這篇文章動手寫個demo
-
功能很簡單,動態網路獲取資料載入然後列表顯示,這就是我們正常開發APP一個流程,這個能走通了,剩下就是自己慢慢琢磨,就可以開發專案了
-
網路請求用的是
Retrofit
class DoubanRetrofit { fun getData( ca:RetrofitCallBack<NowSHowMove>) { val retrofit: Retrofit = Retrofit.Builder() .baseUrl("http://api.douban.com/v2/movie/") .addConverterFactory(GsonConverterFactory.create()) .build() val ipService = retrofit.create(DouBanApi::class.java) ipService.getNowSHowingMove().enqueue(object:Callback<NowSHowMove>{ override fun onResponse(call: Call<NowSHowMove>?, response: Response<NowSHowMove>?) { if (response != null) { ca?.succes(response) }; } override fun onFailure(call: Call<NowSHowMove>?,t: Throwable?) { } }) } }
這裡的需要注意的地方,因為kt
和java
是可以互向呼叫的所以,方便很多,網路庫就可以繼續使用okhttp,這裡序號注意的是回撥解析的物件response
不能直接獲取屬性值,需要response.body()
才能得到NowSHowMove
我們封裝的列表資料
-
view的繫結顯示不在需要findview也不用bf,使用
View Binding
,當你新建工程的時候已經自動新增進來了rv.adapter= NowShowMoveAdapter(response.body()!!);
這樣就相當於setAdapter,這裡需要注意我們的View Binding
同樣可以用於adapter
class RecyclerHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun setData(entriesItem: EntriesItem) { itemView.tv.text=entriesItem.title; itemView.tv_show_time.text="上映時間: "+entriesItem.pubdate; itemView.tv_rating.text="評分: "+entriesItem.rating; Glide.with(itemView.context).load(entriesItem.images.large!!).into(itemView.iv); } }
- 顯示資料
class NowShowMoveAdapter(private val mNowSHowMove: NowSHowMove) : RecyclerView.Adapter<NowShowMoveAdapter.RecyclerHolder>() { override fun onCreateViewHolder(parent: ViewGroup, postion: Int): RecyclerHolder { val view = LayoutInflater.from(App.instance).inflate(R.layout.item_now_show_move, parent, false) return RecyclerHolder(view); } override fun getItemCount(): Int { return mNowSHowMove.entries!!.size; } override fun onBindViewHolder(vh: RecyclerHolder, postion: Int) { vh.setData(mNowSHowMove.entries!![postion]); } class RecyclerHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun setData(entriesItem: EntriesItem) { itemView.tv.text=entriesItem.title; itemView.tv_show_time.text="上映時間: "+entriesItem.pubdate; itemView.tv_rating.text="評分: "+entriesItem.rating; Glide.with(itemView.context).load(entriesItem.images.large!!).into(itemView.iv); } } }
- 這裡需要注意建構函式傳值,可以直接寫在類名上,這樣我們就不需要在定義成員變量了,到此整個資料就載入完畢,程式碼已經上傳:https://github.com/l123456789jy/DouBan