久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

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

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

瀏覽:185日期: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:

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

主站蜘蛛池模板: 民丰县| 垦利县| 额尔古纳市| 宁德市| 彝良县| 思南县| 勐海县| 佛山市| 阜新市| 延庆县| 南召县| 越西县| 兴山县| 高雄县| 洛宁县| 云林县| 商都县| 新乡县| 来宾市| 本溪市| 富阳市| 凭祥市| 黄陵县| 澳门| 闻喜县| 宣武区| 宁海县| 桦川县| 桐城市| 广昌县| 海盐县| 龙游县| 中卫市| 襄汾县| 北票市| 绵阳市| 广州市| 定南县| 日土县| 烟台市| 剑川县|