TabHost的那些事

2022-02-26 09:42:57 字數 1868 閱讀 6334

這兩天在做乙個要用到tabhost的東西,做完後感慨萬千,中間解決了不少問題,也曾經為一些莫名其秒的報錯而搞得焦頭爛額,忙完後,一邊為自己對抓錯分析錯誤的能力而慚愧,一邊又為自己不嚴謹的程式設計風格而途生無謂的錯誤而無奈。所以,在這裡就總結一下自己的體會和心得。

tabhost的實現網上有一大堆教程,也有很多例子可做參考,但是就我的教訓來說,其實一開始就不要隨便照搬別人的例子,而應該先看android官網上的例子**,因為其他人的例子有些是自己有變動的但是我們並不清楚,所以不知道到底哪些東西是不需要的,官方的例子好處就是簡潔,只告訴你建立乙個tabhost所需要的最基本的東西。

上面的就是官方的**。在用gettabhost()得到tabhost後,要用layoutinflater來得到layout。layoutinflater的作用其實和findviewbyid()類似,但是前者是用來尋找layout資料夾下的xml布局檔案,並且例項化,findviewbyid()相信大家都非常熟悉,就是找到某個xml下的具體控制項如按鈕等。具體的引數這裡不解釋,只要上谷歌搜搜就行,這裡只講一些我們容易忽略而導致錯誤的地方。對於上面其實有乙個很容易會犯錯的地方,而且也不應該這麼寫。大家有沒有看出來?就是我們經常預設就會加上去的setcontentview(r.layout.main)!這句是可以去掉的,因為已經通過layoutinflater得到布局了,而且我在開始的時候是將我的tab布局命名為main.xml的人,於是我就悲劇了,這時會報什麼錯誤呢?就是nullpointer!如果大家在有關於布局這方面上出現這個錯誤,就要提個醒,自己的布局檔案或控制項是否能夠切實找到或者重新新增布局檔案呢?舉個例子,不要以為spinner s = (spinner)findviewbyid(r.id.spinner)就能找到你定義的spinner,尤其是有些人會想要往對話方塊上新增spinner而用到alterdialog時,說清楚點,是因為就像tabhost,我們也需要用到layoutinflater來獲取layout,如:view view = layoutinflater.from(this).inflater(r.layout.main, null);這時很多人就疏忽大意了,直接寫spinner s = (spinner)findviewbyid(r.id.spinner).這時會報nullpointer的錯誤,至少我就是這樣。解決的方法就是這樣view.findviewbyid。因為它無法找到你的布局檔案,你已經將它改為view了。所以以後遇到這些問題,就不要再焦頭爛額了,我們已經有乙個思路了,就是可能是我們的布局或控制項出問題,只要找到具體**出問題,nullpointer的問題還是很容易就解決的。

好了,話題錯開了,就返回到正題上。

請注意,上面的**的activity是要繼承自tabactivity才能這樣子寫!只有繼承自tabactivity才能有gettabhost()這個方法獲取tabhost。如果你是想要在tab中新增activity,也很簡單,因為我們有intent。只要這樣子改:setcontent(new intent(this, tab1.class))就行了。接下來討論下如果不是繼承自tabactivity呢?

其實行為都是一樣的,只是我們在得到tabhost的時候就沒有gettabhost()這個方便的方法了,要這麼寫:tabhost tabhost = (tabhost)findviewbyid(r.id.tabhost).很簡單吧?哈哈,這樣想你就錯了,這樣子還是會出現問題!我們必須在add(tab1)前加上這一句tabhost.setup()來啟動tabhost,否則會出錯,就是那個該死的nullpointer!

哈哈,文章至此也就結束,如果你的**中還是有些莫名其秒的錯誤,但是**完全沒錯,嗯,我也遇到過,就是你的manifest中沒有為你的tabactivity註冊^-^,你可以看一下是不是,不是的話我也無能為力了~^0^~

remap的那些事

月14日 今天還在看啟動 看到target.c這裡。先說說target.c的職責。target.c檔案包含和目標初始化相關的 如remap設定 系統時鐘設定和儲存器加速模組設定等,以及irq和fiq的異常處理空函式。好吧,這裡 看到了remap就好好查資料把它搞清楚咯!其實我前面看過這個了,只是人上...

AfxWinMain的那些事

afxwinmain函式原形如下 去掉了原來的很多沒用的注釋和累贅 cpp view plain copy print?int afxapi afxwinmain afxwininit函式 建立當前應用程式主線程 initinstance函式 內部通過create 函式來完成視窗的註冊,建立更新和顯...

void 的那些事

參考 void 是一種特殊的指標型別,可用於存放任意物件的位址。舉個例子 int p 0,pi p void pv p pv pd 但是一旦某個位址放到了void pv中,就不能利用 pv進行操作了 void 中存放的是未知物件的位址,所以無法操作該指標所指向的內容,但是可以對該指標進行操作,比如賦...