findViewById 返回 null 問題

2021-07-10 16:50:01 字數 865 閱讀 3917

用eclipse新建乙個簡單應用,新增乙個簡單按鈕,顯示沒有問題,就是新增響應後,一執行就出錯退出。

除錯一下,發現 findviewbyid函式返回null。

在網上找了好多,被搞的暈了,後來才找到原因。

以前android 沒有fragment,新增的按鈕都加到activity_main.xml,現在有fragment,新增的按鈕都加到fragment_main.xml。

在oncreate中, setcontentview(r.layout.activity_main); 所以 contentview是activity_main, 當然找不到按鈕。

而我以前都習慣在oncreat中初始化控制項,所以出現這個問題。

在oncreateview中,可以找的fragment_main,如下呼叫返回正常:

view rootview = inflater.inflate(r.layout.fragment_main, container, false);

mbutton = (button)rootview. findviewbyid(r.id.button1);

如果不是在oncreatview裡,可以下面方式:

layoutinflater inflater = (layoutinflater)getsystemservice(context.layout_inflater_service);

view rootview = (view)inflater.inflate(r.layout.fragment_main, null);

mbutton = (button)rootview. findviewbyid(r.id.button1);

inflate和findViewById方法對比

inflate 作用就是將xml定義的乙個布局找出來,但僅僅是找出來而且隱藏的,沒有找到的同時並顯示功能。最近做的乙個專案就是這一點讓我迷茫了好幾天。android上還有乙個與inflate 類似功能的方法叫findviewbyid 二者有時均可使用,但也有區別 區別在於 如果你的activity裡...

對煩人的findViewById說再見吧!

下面的這個函式參考自一條微博 public t int id 說明這是乙個泛型方法,並且這個泛型是view的子類,返回值是泛型t,函式名借鑑jquery,使用美元符 例項呼叫 textview tv r.id.tv 為了避免在每個activity中重複寫這個函式,可以寫乙個自己的myactivity...

解決NSData轉NSString返回nil的問題

在使用initwithdata 等方法將 nsdata轉換成nsstring時,如果nsdata的內容含有非encoding編碼的字元,將會返回nil。sdk文件如下 instancetype initwithdata dataencoding encoding return value annss...