成年大片免费视频播放二级_早上躁晚上躁天天躁8090_新金瓶梅2下载_欧美国产一卡二在线播放_国产在线精品欧美日韩电影

您的位置:首頁技術(shù)文章
文章詳情頁

android - 為什么用new方法構(gòu)造的Activity對(duì)象,其中的View成員變量是為空的?

【字號(hào): 日期:2024-09-11 09:33:11瀏覽:72作者:豬豬

問題描述

正如標(biāo)題所言,View成員變量已經(jīng)在Activity的onCreate方法中,通過findViewById方法初始化了。但在另一個(gè)類中,用通過new方法構(gòu)造的Activity對(duì)象來執(zhí)行封裝好的公有方法時(shí),發(fā)現(xiàn)其中的View成員變量是空的。具體代碼如下(new MainActivity().select(selectCity)這句調(diào)用Activity的方法):android - 為什么用new方法構(gòu)造的Activity對(duì)象,其中的View成員變量是為空的?android - 為什么用new方法構(gòu)造的Activity對(duì)象,其中的View成員變量是為空的?

錯(cuò)誤類型是android - 為什么用new方法構(gòu)造的Activity對(duì)象,其中的View成員變量是為空的?

錯(cuò)誤提示是指向下面這句android - 為什么用new方法構(gòu)造的Activity對(duì)象,其中的View成員變量是為空的?

然后,調(diào)試結(jié)果如下android - 為什么用new方法構(gòu)造的Activity對(duì)象,其中的View成員變量是為空的?android - 為什么用new方法構(gòu)造的Activity對(duì)象,其中的View成員變量是為空的?

發(fā)現(xiàn)這里的View對(duì)象是為空的。然后,我換成發(fā)送廣播的方式,讓MainActivity接收廣播,這樣是可以的,調(diào)試結(jié)果如下:android - 為什么用new方法構(gòu)造的Activity對(duì)象,其中的View成員變量是為空的?發(fā)現(xiàn)mCityTextView不是空的。

對(duì)比上面的情況,我覺得通過findViewById方法初始化的View對(duì)象,只屬于Activity這個(gè)類本身,所以由它使用是沒問題的。但是通過new方法構(gòu)造的Activity對(duì)象,得到的是沒有初始化的View對(duì)象。所以究竟是怎么回事呢???

問題解答

回答1:

路子有點(diǎn)野。new MainActivity()并沒有走Activity的生命周期,比如你都是在onCreate()里初始化控件的,你直接調(diào)用select()當(dāng)然空指針了。

回答2:

Activity, Service, ContentProvider三大組件都不能以new的方式獲取實(shí)例(“不正常的實(shí)例”會(huì)更恰當(dāng)),Activity, Service, BroadcastReceiver, ContentProvider四大組件都存在生命周期,不建議在組件外調(diào)用定義的靜態(tài)變量或方法。

回答3:

不知道你說Activity是不是Android的Activity組件,其中Activity組件在構(gòu)造的時(shí)候需要執(zhí)行attach方法,傳入Context,Window等對(duì)象;View為空的原因我猜測是因?yàn)闆]有attach Window對(duì)象;Window對(duì)象是所有View的容器

回答4:

這并不是你想要的activity。請(qǐng)傳遞該activity的引用。

回答5:

看代碼里面其實(shí)你自己在前面已經(jīng)寫出來了getActivity()了,你把獲取到的這個(gè)Activity強(qiáng)轉(zhuǎn)成MainActivity就好了吧直接new一個(gè)Activity是沒有走生命周期方法的,并且這也不是你之前的那個(gè)MainActivity

回答6:

我這里的問題是因?yàn)闆]有為變量設(shè)置static,所以new對(duì)象出來,變量會(huì)為空,要重新初始化。呃,基本知識(shí)沒過關(guān)。。但還是要感謝各位的解答!!

回答7:

這種情況用接口回調(diào)的方式不是更簡單嗎?