[问题]为何BottomSheet和Fragment之间传资料??

楼主: MAXQb   2021-03-20 02:09:02
接下来是比较复杂的使用问题(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呈现的选择结果资料都能维持在画面上
作者: corkcork (thaibar)   2021-03-20 17:11:00
shared viewmodel
作者: ketrobo (猫萝卜)   2021-03-20 20:35:00
你会有这种问题是对于class和instance观念不清楚, android提供的Activity和Fragment都是class,执行时会系统会制造出Activity和Fragment相对应的instance…然后new Intent (activity, Activity.class)这个方式传递参数,其实默认的行为是产生一个Activity的新的instance,将Intent的资料传给这个新的instance,所以会让你有错觉只剩下最后选择的的资料…若Fragment的instance,要传资料给Activity 的instance,可以透过getActivity()和转型配合处理…方法不只一种,但是前置的知识基础都是要求你能够理解class和其instance之间的关系o种基础概念如果不清楚,上网找找教学影片仔细看看,解释起来要敲很多文字配合图片才能有一个模糊的轮廓
作者: LPH66 (-6.2598534e+18f)   2021-03-22 01:05:00
class→类别, instance→实体, 都是物件导向语言的基本观念这个观念你去找任何一本讲 Java 的书几乎都会谈
作者: kobe8112 (小B)   2021-03-22 01:14:00
本版老ID了其实
作者: LZN (秋)   2021-03-22 10:39:00
button跟buttonsheet不是都在同个fragment? 不需要用intent吧
作者: ohmylove347 (米特巴爾)   2021-03-22 19:10:00
如果是BottomSheetDialogFragment的话那就是另一个独立的Fragment了
作者: pinefruit (莫使惹尘埃)   2021-03-25 02:15:00
你的流程是在同个 activity 内沟通,不需要 intent。把 intent 拿掉后可以避免二楼 K 大提到的问题。然后我觉得.. 你可以先锁定一个已知的方法,例如文章内你提到单例,单例肯定能解决这问题的,就用单例 + listener 来完成跨 fragment 的沟通吧!等到单例成功后,再来研究更复杂的 ViewModel 即可。listener 泛指一种监听资料变化或事件的实作模式,搜寻 java listener 即可找到许多解说及范例。以下试着说明在你的问题中,各元件的角色及沟通流程。首先 fragment 及 bottom sheet 都可以呼叫单例的getInstance() 取得"同一个"单例的实体。当 bottom sheet 按完选项后,可呼叫单例的 setData ()之类的方法将资料传入。而 fragment 则是 listener,负责监听单例的资料变化。当单例的 data 被改变时,将呼叫 listener 上的方法,例如 onDataChanged(),来通知 fragment 资料改变了,这时 fragment 就能取得新资料来改变画面上的文字了。

Links booklink

Contact Us: admin [ a t ] ucptt.com