我希望能够显示Snackbars,但我很困惑这个概念,我必须提供一个视图。你会认为它会允许你默认在屏幕底部显示Snackbar,但也许我错过了一些东西。可以findViewById(android.R.id.content)为Snackbars返回null?
反正据说这可以通过使用视图来完成:
findViewById(android.R.id.content)
不过,我得到一个警告,这可能为空,即使它似乎总是工作,无论我试试吧。它何时可能为空?
我希望能够显示Snackbars,但我很困惑这个概念,我必须提供一个视图。你会认为它会允许你默认在屏幕底部显示Snackbar,但也许我错过了一些东西。可以findViewById(android.R.id.content)为Snackbars返回null?
反正据说这可以通过使用视图来完成:
findViewById(android.R.id.content)
不过,我得到一个警告,这可能为空,即使它似乎总是工作,无论我试试吧。它何时可能为空?
findViewById
总是可以为空,如果你试图找到一种观点认为,在当前布局中不存在。
该警告只是一个帮助。 这也可能是非常通用的,如果你看看Activity类的源里面,你会发现这个方法:
@Nullable
public View findViewById(@IdRes int id) {
return getWindow().findViewById(id);
}
的Nullable
注释只是告知编译器,有可能会在这里得到一个null
参考的可能性,林特会对此作出反应。它不知道如何区分findViewById(android.R.id.content)
或其他呼叫与findViewById(R.id.myCustomLayoutId)
。不过你可以自己添加Lint检查。
无论何时在Activity
的内部,您都可以安全地使用findViewById(android.R.id.content)
。
只要onCreateView
被调用,您就可以在Fragment
内安全使用getView()
。
当你“重新放入片段内,但是您希望小吃店显示在整个屏幕的底部? getActivity()。findViewById(android.R.id.content)什么的? –
啊是的,你可以调用'getActivity()。findViewById(android.R.id.content)'来获得根视图。 – Darwind
它也告诉我getView()可能为空 - 相同的想法?可能为空,但可能不是? –
如果你不是在AppCompatActivity传递活动
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();
}
您是否在AppCompatActivity? – Chol
我通常在AppCompatActivity或片段 –
对于appCompatActivity它可能与此问题有关:https://code.google.com/p/android/issues/detail?id=203345 – Chol