編輯:關於Android編程
【問題描述】
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的快速解決辦法 – 玄機逸士的專欄 – 博客頻道 – CSDN.NET
但是沒搞定。
2.後來是去搜:
findViewById R.layout null
而最終找到並參考:
[Android]inflate方法與 findViewById 方法區別 | LayoutInflater的inflate函數用法詳解 – 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);
即可。
【總結】
此處findViewById返回為null,原因是:
沒有在索要find的子view的Parent中去找
或者是:
當然的View下面,沒有包含對應的想要找的view,
從而導致找不到,返回null。
解決辦法是:
找到要找的view的parent或root的view
再在父級的view中找你要的子view就可以了。
常見的寫法是:
LayoutInflater inflater = (LayoutInflater)tabContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout groupPollingAddress = (LinearLayout)inflater.inflate(R.layout.fragment_field_list, null);
其中是先去找到當前系統的Layout,然後實例化,然後在全局的view中再去找你的view就可以找到了。
PS:Android 自定義view中findViewById為空的快速解決辦法
網上說的都是在super(context, attrs);構造函數這裡少加了一個字段,其實根本不只這一個原因,屬於view生命周期的應該知道,如果你在自定義view的構造函數裡面調用findViewById 鐵定為空的,因為這個時候view還在初始化階段,還沒有添加到activity的XML布局上,所以你怎麼調用都是沒用的,解決辦法就是把我們的findViewById方法換一個生命周期上面調用就OK了,比如我就是在
protected void onAttachedToWindow() { super.onAttachedToWindow();}
上面調用的
一、proc文件系統傳統意義上的文件系統是用於塊設備上信息的存儲,/proc這個目錄是一個虛擬文件系統,它放置的數據都是在內存當中,所以這個目錄本身不占用任何硬盤空間。主
一般來說,Android應用程序中的Button響應事件有兩種書寫方式 Button button=null; button.setOnClickListener(n
1.在移動設備訪問m.alipay.com時,如果本地安裝了支付寶客戶端,則浏覽器會調用本地客戶端,沒有安裝則會跳轉到下載頁面,提示安裝。剛好有這樣的需求,就分析了下支付
Android canvas drawBitmap方法詳解及實例之前自己在自定義view,用到canvas.drawBitmap(Bitmap, SrcRec