作者QQ29 (我愛阿蓉)
看板AndroidDev
標題[問題] UI 物件 存取方式?
時間Sun Dec 29 00:51:55 2013
大家好
最近開始接觸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
1F:→ gn00742754:非Activity Class中寫event listener,建構的時候傳 12/29 04:15
2F:→ gn00742754:實作近來 12/29 04:15
3F:→ QQ29:listener在java也只是自己開界面傳物件,這樣等於listener也 12/29 11:23
4F:→ QQ29:會遇到我問的問題吧?除非activity本身就是listener,但這樣架 12/29 11:23
5F:→ QQ29:構變很怪 12/29 11:23
6F:推 sdyy:用一 在onresume註冊 onpause註銷 就好啦 12/29 11:33
7F:推 tac0wu:你的意思是想一個reciver instance控制複數個Activity? 12/29 15:06
8F:→ tac0wu:receiver 12/29 15:07
9F:→ tac0wu:這我第一個想到就是 memory leak 的問題 12/29 15:07
10F:→ tac0wu:如果你只是想做receiver 跟其他被控制物件的decouple 12/29 15:09
11F:→ tac0wu:就用 listenner 的作法即可 12/29 15:09
12F:推 tac0wu:基本上你的問題 通常就是用delegation 來解 12/29 15:26
13F:推 aimw0202:還蠻多的 可用database、sharepreference、static(注意me 12/29 17:36
14F:→ aimw0202:morey就好) Listener也可,receiver缺點是有時候收太慢 12/29 17:38
15F:→ QQ29:receiver只是我舉例,主要是想問非activity的class想存取ui, 12/29 23:55
16F:→ QQ29:該怎讓這class使用呢?例如asynctask之類的 12/29 23:55
17F:→ QQ29:傳listener這listener也是會有需要存取ui的需求,除非寫在inn 12/29 23:58
18F:→ QQ29:er class但總覺得都寫在inner 似乎不是個好design 12/29 23:58
19F:推 tac0wu:你會覺得onclick listener 很怪嗎 12/30 00:11
20F:推 tac0wu:你的class declare 一個inner public interface 12/30 00:15
21F:推 tac0wu:.在activity implement 後傳近去 12/30 00:16
22F:推 typepeter:還滿多Android系統自己的Class,都寫一堆inner class 12/30 00:18
23F:推 tac0wu:基本上android 用這種方式做decouple 很常見喔 12/30 00:18
24F:→ typepeter:如果覺得太怪的話 可以看看Google怎麼寫的:P 12/30 00:18
25F:推 gpc5566:inner class很正常 ANDROID都這樣 跟M$不一樣... 12/30 14:37
26F:推 gpc5566:不然你再用UI listener還要多弄一個class裝嗎 12/30 14:40
27F:→ QQ29:java有類似c# partial class寫法嗎,想分檔案寫,怕一個class 12/31 02:06
28F:→ QQ29:再一個檔案過大 12/31 02:06
29F:→ quare96:你可以看看roboGuice, 這課題我之前研究過 01/03 13:46