android-fragments 在碎片销毁时解除活动的小吃店

uidvcgyl  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(145)

我如何确保任何可见的Snackbar(特别是那些带有snackbar.length_infinite的)在片段被销毁后会被删除?

我是否应该为所有Snackbars使用一个通用的globar变量,并调用dismiss?

片段1.java

private Snackbar snackbar;

@Override
public onDestroy(){
    snackbar.dismiss();
}

public Method1(){
    snackbar = Snackbar.make(ActivityMain.coordinatorLayout, "Text 1", snackbar.length_indefinite);
    snackbar.show();
}

public Method2(){
    snackbar = Snackbar.make(ActivityMain.coordinatorLayout, "Text 2", snackbar.length_indefinite);
    snackbar.show();
}
//coordinatorLayout is a static variable in ActivityMain which stores reference to the CoordinatorLayout
ssgvzors

ssgvzors1#

我如何确保任何可见的Snackbar(特别是那些带有snackbar.length_infinite的)在片段被销毁后都将被删除?
要消除这个问题,请调用onDestroy();方法**,就像您所做**一样。
我是否应该为所有Snackbars使用一个通用的globar变量,并调用dismiss?

是的,你可以这样做,因为snackbar在你的类中被使用了很多次,所以最好声明它是全局的。

请访问www.example.com了解更多小吃店详情developer.android.com

2ul0zpep

2ul0zpep2#

虽然有全局SnackBar并确保在onDestroyView()中关闭它是一个很好的方法。
我建议在CoordinatorLayout中 Package 您的Fragment XML布局,并将片段根视图传递给Snackbar.make函数,如下所示:
fragment_your_fragment.xml

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<!-- Your Layout Content  -->

</androidx.coordinatorlayout.widget.CoordinatorLayout>

您的片段.kt

fun showSnackbar() {
    Snackbar.make(requireView(), "Your message", Snackbar.LENGTH_INDEFINITE).show()
}

这样,当您打开另一个片段(将其添加到堆栈中)时,Snackbar将被自动取消

相关问题