对于 Snackbars,findViewById(android.R.id.content) 可以 return null 吗?
Can findViewById(android.R.id.content) ever return null for Snackbars?
我希望能够显示 Snackbar,但我对必须为其提供视图这一概念感到困惑。您可能认为它允许您默认在屏幕底部显示 Snackbar,但也许我遗漏了什么。
无论如何,这可以通过使用视图来完成:
findViewById(android.R.id.content)
然而,我收到一条警告,指出这可能为空,尽管无论我在哪里尝试它似乎总是有效。什么时候可能为空?
如果您不在 AppCompatActivity
中,请通过 activity
public static void snackBar(Activity activity, String MESSAGE) {
Snackbar.make(activity.findViewById(android.R.id.content), MESSAGE, Snackbar.LENGTH_LONG).show();
}
如果你有上下文可以这样试
public static void snackBar(Context context, String MESSAGE) {
Snackbar.make(((Activity)context).findViewById(android.R.id.content), MESSAGE, Snackbar.LENGTH_LONG).show();
}
如果您尝试查找当前布局中不存在的视图,findViewById
始终可以为 null。
警告只是帮助。
它可能非常通用,如果你查看 Activity class 的源代码,你会发现这个方法:
@Nullable
public View findViewById(@IdRes int id) {
return getWindow().findViewById(id);
}
Nullable
注释只是通知编译器可能会在此处获取 null
引用,Lint 将对此做出反应。它不知道如何区分 findViewById(android.R.id.content)
或其他带有 findViewById(R.id.myCustomLayoutId)
的调用。不过,您或许可以自己添加 Lint 检查。
只要您在 Activity
内,您就可以安全地使用 findViewById(android.R.id.content)
。
只要 onCreateView
被调用,您就可以在 Fragment
中安全地使用 getView()
。
我希望能够显示 Snackbar,但我对必须为其提供视图这一概念感到困惑。您可能认为它允许您默认在屏幕底部显示 Snackbar,但也许我遗漏了什么。
无论如何,这可以通过使用视图来完成:
findViewById(android.R.id.content)
然而,我收到一条警告,指出这可能为空,尽管无论我在哪里尝试它似乎总是有效。什么时候可能为空?
如果您不在 AppCompatActivity
中,请通过 activitypublic static void snackBar(Activity activity, String MESSAGE) {
Snackbar.make(activity.findViewById(android.R.id.content), MESSAGE, Snackbar.LENGTH_LONG).show();
}
如果你有上下文可以这样试
public static void snackBar(Context context, String MESSAGE) {
Snackbar.make(((Activity)context).findViewById(android.R.id.content), MESSAGE, Snackbar.LENGTH_LONG).show();
}
findViewById
始终可以为 null。
警告只是帮助。 它可能非常通用,如果你查看 Activity class 的源代码,你会发现这个方法:
@Nullable
public View findViewById(@IdRes int id) {
return getWindow().findViewById(id);
}
Nullable
注释只是通知编译器可能会在此处获取 null
引用,Lint 将对此做出反应。它不知道如何区分 findViewById(android.R.id.content)
或其他带有 findViewById(R.id.myCustomLayoutId)
的调用。不过,您或许可以自己添加 Lint 检查。
只要您在 Activity
内,您就可以安全地使用 findViewById(android.R.id.content)
。
只要 onCreateView
被调用,您就可以在 Fragment
中安全地使用 getView()
。