Android中findViewById返回為空null的快速解決辦法
【問題描述】
Android中如下代碼:
LinearLayout groupPollingAddress = (LinearLayout)findViewById(R.layout.fragment_field_list);
返回為null。
【解決過程】
1.參考:
android – getActivity().findViewById(R.layout.contacts_list_view) returns null – Stack Overflow
AndroidGUI27中findViewById返回null的快速解決辦法 – 玄機(jī)逸士的專欄 – 博客頻道 – CSDN.NET
但是沒搞定。
2.后來是去搜:
findViewById R.layout null
而最終找到并參考:
[Android]inflate方法與 findViewById 方法區(qū)別 | LayoutInflater的inflate函數(shù)用法詳解 – loyea – 博客園
去換為:
LayoutInflater inflater = (LayoutInflater)tabContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout groupPollingAddress = (LinearLayout)inflater.inflate(R.layout.fragment_field_list, null);
即可。
3.另外的,類似的:
TextView tab1AllGroupPollingAddressLabel = (TextView) findViewById(R.id.lblVariable);
也是返回null,所以去換為:
TextView tab1AllGroupPollingAddressLabel = (TextView) groupPollingAddress.findViewById(R.id.lblVariable);
即可。
【總結(jié)】
此處findViewById返回為null,原因是:
沒有在索要find的子view的Parent中去找
或者是:
當(dāng)然的View下面,沒有包含對(duì)應(yīng)的想要找的view,
從而導(dǎo)致找不到,返回null。
解決辦法是:
找到要找的view的parent或root的view
再在父級(jí)的view中找你要的子view就可以了。
常見的寫法是:
LayoutInflater inflater = (LayoutInflater)tabContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout groupPollingAddress = (LinearLayout)inflater.inflate(R.layout.fragment_field_list, null);
其中是先去找到當(dāng)前系統(tǒng)的Layout,然后實(shí)例化,然后在全局的view中再去找你的view就可以找到了。
PS:Android 自定義view中findViewById為空的快速解決辦法
網(wǎng)上說的都是在super(context, attrs);構(gòu)造函數(shù)這里少加了一個(gè)字段,其實(shí)根本不只這一個(gè)原因,屬于view生命周期的應(yīng)該知道,如果你在自定義view的構(gòu)造函數(shù)里面調(diào)用findViewById 鐵定為空的,因?yàn)檫@個(gè)時(shí)候view還在初始化階段,還沒有添加到activity的XML布局上,所以你怎么調(diào)用都是沒用的,解決辦法就是把我們的findViewById方法換一個(gè)生命周期上面調(diào)用就OK了,比如我就是在
protected void onAttachedToWindow() { super.onAttachedToWindow();}
上面調(diào)用的
相關(guān)文章
Android使用CountDownTimer類實(shí)現(xiàn)倒計(jì)時(shí)鬧鐘
這篇文章主要為大家詳細(xì)介紹了Android使用CountDownTimer類實(shí)現(xiàn)倒計(jì)時(shí)鬧鐘,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Android使用GridView實(shí)現(xiàn)日歷功能示例(詳細(xì)代碼)
本篇文章主要介紹了Android使用GridView實(shí)現(xiàn)日歷功能示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。2017-01-01Android中查看USB連接的外接設(shè)備信息的代碼實(shí)例
這篇文章主要介紹了Android中查看USB連接的外接設(shè)備信息的代碼實(shí)例,需要的朋友可以參考下2014-04-04Android Listview點(diǎn)贊問題關(guān)于圖片重復(fù)問題
最近在開發(fā)android方面的項(xiàng)目時(shí),遇到很多問題,下面小編以listview 與 baseadapter結(jié)合使用為例,給大家分享下關(guān)于點(diǎn)贊的的時(shí)候 圖片重復(fù)問題的解決方法,一起看看吧2016-11-11Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫效果(八)
這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫效果的第八篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Android實(shí)現(xiàn)自動(dòng)輪詢的RecycleView
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自動(dòng)輪詢的RecycleView,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10