AndroidDev 板


LINE

接下來是比較複雜的使用問題(Java寫法)。 如圖所示: https://i.imgur.com/jKs2g5t.png
首先 1.有1個Activity 2.Activity裡有3個能滑動換頁面的Fragment(Viewpager2)及TabLayout 3.Fragment裡有N個Button,ex:Button1、Button2等 4.按下Button後畫面底部會出現bottom_sheet出來 5.bottom_sheet裡面預計有Button、ImageButton、SeekBar等項目 6.項目選擇完後,資料會傳回Button1那呈現選擇結果 之後重複3.~6.直到選擇完 這期間Button1、Button2呈現的選擇結果資料都能維持在畫面上 --------------------------------------------------------- 問題是: 當我想把BottomSheet的選擇結果傳回到Fragment裡的Button1呈現出來 Intent卻是要這樣寫,Intent intent=new Intent(getActivity(),Activity.class); 資料才傳的過去 而不是Intent intent=new Intent(getActivity(),Fragment.class); 而且用getInstance()單例也沒辦法在兩個Fragment間set、get資料結果 這也因此沒辦法用ViewModel來維持選擇結果在畫面上,只要下一個按鈕選擇完後,畫面 整體就會更新 ex:Button2選擇完後,本來顯示在Button1的結果還是會消失,只留下Button2的選擇結果 為何BottomSheet和Fragment之間的關係會是這樣呢? 請問正確寫法or更好的寫法,該怎麼寫才對? 有沒有最簡單的範例可看啊? 謝謝各位的解答了。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.243.8.190 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1616177347.A.DBB.html
1F:推 corkcork: shared viewmodel 03/20 17:11
感謝 不過這個和viewmodel不同是新東西啊?
2F:→ ketrobo: 你會有這種問題是對於class和instance觀念不清楚, andr 03/20 20:35
3F:→ ketrobo: oid提供的Activity和Fragment都是class,執行時會系統會 03/20 20:35
4F:→ ketrobo: 製造出Activity和Fragment相對應的instance…然後new I 03/20 20:35
5F:→ ketrobo: ntent (activity, Activity.class)這個方式傳遞參數,其 03/20 20:35
6F:→ ketrobo: 實預設的行為是產生一個Activity的新的instance,將Inte 03/20 20:35
7F:→ ketrobo: nt的資料傳給這個新的instance,所以會讓你有錯覺只剩下 03/20 20:35
8F:→ ketrobo: 最後選擇的的資料…若Fragment的instance,要傳資料給Ac 03/20 20:35
9F:→ ketrobo: tivity 的instance,可以透過getActivity()和轉型配合處 03/20 20:35
10F:→ ketrobo: 理…方法不只一種,但是前置的知識基礎都是要求你能夠理 03/20 20:35
11F:→ ketrobo: 解class和其instance之間的關係 03/20 20:35
12F:推 ketrobo: o種基礎概念如果不清楚,上網找找教學影片仔細看看,解釋 03/20 20:40
13F:→ ketrobo: 起來要敲很多文字配合圖片才能有一個模糊的輪廓 03/20 20:40
感謝。 class還稍微了解,但instance這個我真的不太了解,和Java的實作好像又不一樣 嗯,所以我應該去從Java書中找嗎? 請問如果要找教學影片的話,class and instance這個就是關鍵字嗎?
14F:推 LPH66: class→類別, instance→實體, 都是物件導向語言的基本觀念 03/22 01:05
15F:→ LPH66: 這個觀念你去找任何一本講 Java 的書幾乎都會談 03/22 01:06
16F:→ kobe8112: 本版老ID了其實 03/22 01:14
17F:→ LZN: button跟buttonsheet不是都在同個fragment? 不需要用intent吧 03/22 10:39
18F:推 ohmylove347: 如果是BottomSheetDialogFragment的話那就是另一個獨 03/22 19:10
19F:→ ohmylove347: 立的Fragment了 03/22 19:10
我看了一下自己的java入門書 好像只有提到方法的instance,它沒有說和Activity、Fragment的關係 雖然努力看著教學範例做,但好像做出來是一知半解 我也有一本Android書&到圖書館借書,但剛好都沒有我所需要的知識 不知道有沒有推薦能詳細說明及範例的Android書啊?
20F:推 ohmylove347: 我是上一學期的課後自學的耶哈哈哈,然後現在用的方 03/24 01:25
21F:→ ohmylove347: 法很亂老師說根本亂搞哈哈哈。前幾篇有位資深的大大 03/24 01:25
22F:→ ohmylove347: 有出書喔,你要不要買那本看看?哪位大大資歷有十年 03/24 01:25
23F:→ ohmylove347: 了超猛 03/24 01:25
24F:推 ohmylove347: #1WHt3FEl 03/24 01:27
其實我也有看到這本書 只是我java其實並沒有學很深,而Kotlin更是沒用過 不知道自己的程度看不看得懂 但我會考慮購入,感謝推薦!
25F:推 ohmylove347: 我也是純java目前,Java底子也不好所以學得頗累,到 03/24 20:25
26F:→ ohmylove347: 目前的心得感覺是用Android練Java哈哈 03/24 20:25
不過其實越用後,有些地方又會回去看java書的基礎在自己試著執行一次 如果是那本書,不知道裡面有沒有說明我現在的問題?
27F:推 pinefruit: 你的流程是在同個 activity 內溝通,不需要 intent。 03/25 02:15
28F:→ pinefruit: 把 intent 拿掉後可以避免二樓 K 大提到的問題。 03/25 02:16
29F:推 pinefruit: 然後我覺得.. 你可以先鎖定一個已知的方法, 03/25 02:18
30F:→ pinefruit: 例如文章內你提到單例,單例肯定能解決這問題的, 03/25 02:18
31F:→ pinefruit: 就用單例 + listener 來完成跨 fragment 的溝通吧! 03/25 02:20
32F:→ pinefruit: 等到單例成功後,再來研究更複雜的 ViewModel 即可。 03/25 02:21
感謝。 您是說單例的getInstance傳遞資料嗎? 那它的getter和setter各該放在哪個地方呢?(activity、Fragment、bottom sheet?) 我有試了一下,只有第一次資料有傳過去,第二次後的資料結果還是都停在第一次 而您說的listener是指Button的的OnClick listener這個嗎? 我是把OnClick用Switch來分別處理按鈕按下時的動作 問題是最後Button裡的文字沒辦法變化,另外Bottom sheet沒辦法在按下按鈕後消失 ※ 編輯: MAXQb (111.243.0.112 臺灣), 03/25/2021 16:34:38
33F:推 pinefruit: listener 泛指一種監聽資料變化或事件的實作模式, 03/25 17:59
34F:→ pinefruit: 搜尋 java listener 即可找到許多解說及範例。 03/25 18:00
35F:推 pinefruit: 以下試著說明在你的問題中,各元件的角色及溝通流程。 03/25 18:12
36F:→ pinefruit: 首先 fragment 及 bottom sheet 都可以呼叫單例的 03/25 18:12
37F:→ pinefruit: getInstance() 取得"同一個"單例的實體。 03/25 18:13
38F:→ pinefruit: 當 bottom sheet 按完選項後,可呼叫單例的 setData () 03/25 18:13
39F:→ pinefruit: 之類的方法將資料傳入。 03/25 18:14
40F:→ pinefruit: 而 fragment 則是 listener,負責監聽單例的資料變化。 03/25 18:14
41F:→ pinefruit: 當單例的 data 被改變時,將呼叫 listener 上的方法, 03/25 18:16
42F:→ pinefruit: 例如 onDataChanged(),來通知 fragment 資料改變了, 03/25 18:16
43F:→ pinefruit: 這時 fragment 就能取得新資料來改變畫面上的文字了。 03/25 18:17
44F:→ pinefruit: ※最後補充,bottom sheet 可呼叫 dismiss() 來關閉。 03/25 18:27
我大概知道您的意思了,只是目前我要再多想想要怎麼寫 才能把監聽單例的資料、onDataChanged()及畫面做結合 感謝! ※ 編輯: MAXQb (111.243.0.112 臺灣), 03/25/2021 23:32:11







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP