Kotlin的findViewById

研究Kotlin語言,遇到不少坑,先入為主的Java語言習(xí)慣,不由自主的陷了進(jìn)去??傆X得語言簡化了,到處都不嚴(yán)謹(jǐn),但事實(shí)上崩潰減少了,更多的事情編譯器已經(jīng)幫我們做好了。

無論如何,想突破現(xiàn)在的舒適區(qū),需要付出一定的努力。初用Kotlin真的是無從寫起,滿腔的Java,如果順利噴出,不到兩分鐘就能解決的問題。現(xiàn)在要一點(diǎn)一點(diǎn),別扭的轉(zhuǎn)化成K語言。實(shí)在不知道咋寫,就用AndroidStudio自帶的轉(zhuǎn)換器,將原有的java轉(zhuǎn)化成kotlin,慢慢學(xué)習(xí)寫法。

好吧,先說遇到的第一個(gè)小坑,就是findViewById。

這是幾乎每個(gè)Activity都會(huì)用到的方法,但是轉(zhuǎn)化成Kotlin以后,卻遇到了問題:

圖1.無法推測(cè)出適當(dāng)?shù)念愋?,沒有足夠的信息

參看圖1,我想拿到listView里邊的引用,把Adapter放進(jìn)去,但是編譯器報(bào)錯(cuò),Type inference failed: Not enough information to infer parameter T in fun findViewById。說無法推斷出參數(shù)的具體類型,信息不足。哦哦哦,估計(jì)要我強(qiáng)轉(zhuǎn)一下吧,加上as ListView。

圖2.加上強(qiáng)制轉(zhuǎn)換也不行

額,強(qiáng)轉(zhuǎn)了也不行,都明確告訴你了,也不給面子。新語言,各種不會(huì)寫,于是我使用IDE自帶的聯(lián)想功能,敲出了findViewById,可以發(fā)現(xiàn),后邊緊跟的是尖括號(hào)。

圖3.使用IDE自帶的代碼聯(lián)想

難道是kotlin的新功能嘛?本能翻進(jìn)了源碼,請(qǐng)參考圖4.

圖4.翻看源碼查找原因

小小對(duì)比了一下,本次構(gòu)建的是新工程,使用了support-v7包,并升級(jí)到26了。老工程沒有報(bào)錯(cuò)(好吧我承認(rèn)懶得升級(jí),并且用了Java自動(dòng)轉(zhuǎn)Kotlin),但是新工程由于這個(gè)泛型的問題,轉(zhuǎn)化受到了影響。所以要將轉(zhuǎn)化的類型告訴編譯器,請(qǐng)參見圖5.

圖5.無報(bào)錯(cuò)寫法

編譯運(yùn)行,通過??!完美解決問題?No.

再查資料,發(fā)現(xiàn)大伙都對(duì)findViewById這個(gè)方法比較無奈,控件稍微復(fù)雜一些,代碼行數(shù)就上去了,這也是ButterKnife火爆的原因之一。Kotlin推薦的寫法如圖6所示,一定程度上解決了findViewById占用過多行數(shù),聲明過多變量的問題。

圖6.Kotlin推薦的寫法

同樣的id,命名listView_study_content,直接用這個(gè)id即可,省去了好多轉(zhuǎn)化的步驟,很方便。注意需要引入kotlinx.android.synthetic.main.your_layout.*,把layout引入,如圖7所示,就可以肆無忌憚地操作了。

圖7.注意導(dǎo)入

小坑分享給大家,祝大伙早日習(xí)成Kotlin。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,160評(píng)論 25 708
  • Google在今年的IO大會(huì)上宣布,將Android開發(fā)的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍(lán)灰_q閱讀 77,196評(píng)論 31 489
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,703評(píng)論 9 118
  • 在即將畢業(yè)的日子,經(jīng)歷過秋招黯然收?qǐng)龅拇驌?,也隨大流準(zhǔn)備考公務(wù)員,想想剛上大學(xué)時(shí),從來就沒有想過會(huì)參加考公。在四月...
    映跡海閱讀 651評(píng)論 7 5
  • 2016年8月29日 你說很多人說你渣可是并不是因?yàn)楣钾?fù)了我,聽起來覺得怪怪的,總之不是歡喜 這些日子很愛你,可能...
    芒醉閱讀 366評(píng)論 0 0

友情鏈接更多精彩內(nèi)容