我希望能夠顯示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