ViewModelone 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/

10-10 08:32