国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

android - 為什么用new方法構造的Activity對象,其中的View成員變量是為空的?

瀏覽:159日期:2024-09-11 09:33:11

問題描述

正如標題所言,View成員變量已經在Activity的onCreate方法中,通過findViewById方法初始化了。但在另一個類中,用通過new方法構造的Activity對象來執行封裝好的公有方法時,發現其中的View成員變量是空的。具體代碼如下(new MainActivity().select(selectCity)這句調用Activity的方法):android - 為什么用new方法構造的Activity對象,其中的View成員變量是為空的?android - 為什么用new方法構造的Activity對象,其中的View成員變量是為空的?

錯誤類型是android - 為什么用new方法構造的Activity對象,其中的View成員變量是為空的?

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

然后,調試結果如下android - 為什么用new方法構造的Activity對象,其中的View成員變量是為空的?android - 為什么用new方法構造的Activity對象,其中的View成員變量是為空的?

發現這里的View對象是為空的。然后,我換成發送廣播的方式,讓MainActivity接收廣播,這樣是可以的,調試結果如下:android - 為什么用new方法構造的Activity對象,其中的View成員變量是為空的?發現mCityTextView不是空的。

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

問題解答

回答1:

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

回答2:

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

回答3:

不知道你說Activity是不是Android的Activity組件,其中Activity組件在構造的時候需要執行attach方法,傳入Context,Window等對象;View為空的原因我猜測是因為沒有attach Window對象;Window對象是所有View的容器

回答4:

這并不是你想要的activity。請傳遞該activity的引用。

回答5:

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

回答6:

我這里的問題是因為沒有為變量設置static,所以new對象出來,變量會為空,要重新初始化。呃,基本知識沒過關。。但還是要感謝各位的解答!!

回答7:

這種情況用接口回調的方式不是更簡單嗎?

主站蜘蛛池模板: 永顺县| 景洪市| 四子王旗| 上杭县| 贵南县| 巩义市| 永吉县| 温泉县| 天长市| 卓资县| 蚌埠市| 牟定县| 景东| 兰州市| 瑞昌市| 钟山县| 山丹县| 舟山市| 鄂州市| 寻乌县| 荥阳市| 南乐县| 黑龙江省| 远安县| 乐陵市| 阳春市| 霍州市| 平乡县| 资中县| 东台市| 镇安县| 如东县| 琼海市| 秦安县| 馆陶县| 德化县| 广丰县| 通州市| 东阳市| 土默特左旗| 青神县|