[問題] UI 物件 存取方式?

看板AndroidDev作者 (我愛阿蓉)時間10年前 (2013/12/29 00:51), 編輯推噓11(11018)
留言29則, 8人參與, 最新討論串1/1
大家好 最近開始接觸android 有一個比較關於 design上的問題請教各位 常常會在非activity的class內需要update UI element. 這時候這個ui element物件從哪來的?? 到底該怎麼設計會比較優雅 假設receiver收到intent後要更新ui 我自己想到的方式有以下幾個 1.無腦把receiver寫在Activity inner class, 這樣也不用刻意傳遞ui 物件 想存取誰就存取誰, 但這時又想到 若這receiver有可能會存取 另一個activity底下的ui 這樣就不能寫在inner class了?? 2. Activity new 一個Handler 和對應要執行的Runnable物件到receiver裡面 等到收到intent後 直接執行post 讓他去跑我的Runnable(當然這runnable又要寫在inner) 感覺這比1 漂亮一些... 3. 把所有Activity用到的UI 物件都抽出來到一個class內 例如 class Activity1UI{static public TextView t;.....} class Activity2UI{......} 這樣不管是要在哪裡存取哪個activity的UI 都直接存static物件取得 但這方法我自己覺得是要刻意判斷這物件是不是null(剛好activity並不存在的情況) 4. 當然就是最苦力的 class要存取哪個ui 就在constructor開介面讓使用的人傳進來 但這個寫法就很不彈性了...新增或是刪除ui 都要改很多地方... 以上是我新手能想到的方法@@ 請問各位告訴我有什麼好方式或是standard pattern可以學習的 請指教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.218.216.157

12/29 04:15, , 1F
非Activity Class中寫event listener,建構的時候傳
12/29 04:15, 1F

12/29 04:15, , 2F
實作近來
12/29 04:15, 2F

12/29 11:23, , 3F
listener在java也只是自己開界面傳物件,這樣等於listener也
12/29 11:23, 3F

12/29 11:23, , 4F
會遇到我問的問題吧?除非activity本身就是listener,但這樣架
12/29 11:23, 4F

12/29 11:23, , 5F
構變很怪
12/29 11:23, 5F

12/29 11:33, , 6F
用一 在onresume註冊 onpause註銷 就好啦
12/29 11:33, 6F

12/29 15:06, , 7F
你的意思是想一個reciver instance控制複數個Activity?
12/29 15:06, 7F

12/29 15:07, , 8F
receiver
12/29 15:07, 8F

12/29 15:07, , 9F
這我第一個想到就是 memory leak 的問題
12/29 15:07, 9F

12/29 15:09, , 10F
如果你只是想做receiver 跟其他被控制物件的decouple
12/29 15:09, 10F

12/29 15:09, , 11F
就用 listenner 的作法即可
12/29 15:09, 11F

12/29 15:26, , 12F
基本上你的問題 通常就是用delegation 來解
12/29 15:26, 12F

12/29 17:36, , 13F
還蠻多的 可用database、sharepreference、static(注意me
12/29 17:36, 13F

12/29 17:38, , 14F
morey就好) Listener也可,receiver缺點是有時候收太慢
12/29 17:38, 14F

12/29 23:55, , 15F
receiver只是我舉例,主要是想問非activity的class想存取ui,
12/29 23:55, 15F

12/29 23:55, , 16F
該怎讓這class使用呢?例如asynctask之類的
12/29 23:55, 16F

12/29 23:58, , 17F
傳listener這listener也是會有需要存取ui的需求,除非寫在inn
12/29 23:58, 17F

12/29 23:58, , 18F
er class但總覺得都寫在inner 似乎不是個好design
12/29 23:58, 18F

12/30 00:11, , 19F
你會覺得onclick listener 很怪嗎
12/30 00:11, 19F

12/30 00:15, , 20F
你的class declare 一個inner public interface
12/30 00:15, 20F

12/30 00:16, , 21F
.在activity implement 後傳近去
12/30 00:16, 21F

12/30 00:18, , 22F
還滿多Android系統自己的Class,都寫一堆inner class
12/30 00:18, 22F

12/30 00:18, , 23F
基本上android 用這種方式做decouple 很常見喔
12/30 00:18, 23F

12/30 00:18, , 24F
如果覺得太怪的話 可以看看Google怎麼寫的:P
12/30 00:18, 24F

12/30 14:37, , 25F
inner class很正常 ANDROID都這樣 跟M$不一樣...
12/30 14:37, 25F

12/30 14:40, , 26F
不然你再用UI listener還要多弄一個class裝嗎
12/30 14:40, 26F

12/31 02:06, , 27F
java有類似c# partial class寫法嗎,想分檔案寫,怕一個class
12/31 02:06, 27F

12/31 02:06, , 28F
再一個檔案過大
12/31 02:06, 28F

01/03 13:46, , 29F
你可以看看roboGuice, 這課題我之前研究過
01/03 13:46, 29F
文章代碼(AID): #1Ilm6kdP (AndroidDev)