在ViewModel
和one activity multiple fragments
概念时代,在“活动与片段”中放置Toasts,Snackbars的建议是什么?
很明显,像
新意向
片段交易/片段设置
权限请求
展示导航组件(抽屉,viewpager)
应该由活动来处理,但是吐司/小吃店呢?
关于如何在Fragment中显示Toasts或Snackbars以及如何使用+ cc以及何时使用getContext()
的问题如此之多,我倾向于让活动处理所有显示的消息。
使用ViewModel和SingleLiveEvent,可以很容易地拥有一个由活动和片段观察到的sharedViewModel,并且在需要时,片段将调度一个事件,该事件通知活动以显示消息。
因此,您在考虑可重用性和关注点分离的同时,您认为最佳实践/建议是什么?
最佳答案
这取决于。也许您总是可以用一些UI部件(TextView,Button)或Dialogs / DialogFragments来代替Toast / Snackbars。
它确实取决于您的应用程序体系结构,但是我想您可以设计一些依赖项:活动范围或片段范围,因此您可以将其作为ViewModel的抽象注入并随意使用。
恕我直言,如果您要处理Toasts,则可以在活动/应用程序范围内设计MessageShower并在任何地方重复使用(处理Toast的单个实例),但是Snackbars需要显示View(因此它们需要生命周期,并且更容易创建内存)泄漏)。
interface MessageShower{
void showMessage(String message);
}
class LongToastMessageShower implements MessageShower{
private Toast toast;
public LongToastMessageShower(Context appContext){
this.toast = Toast.makeText(appContext,"",Toast.LENGTH_LONG);
}
@Override
public void showMessage(String message){
toast.cancel();
toast.setText(message);
toast.show();
}
}
关于android - Android Architecture Components时代在哪里放置Toasts,Snackbars等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53507668/