2016-06-10 9 views
0

나는 스낵바를 표시 할 수 싶지만는 내가보기에 그것을 제공해야이 개념을 혼동하고있다. 기본적으로 화면 아래쪽에 Snackbar를 표시 할 수 있다고 생각할 수도 있지만, 뭔가 빠뜨린 것 같습니다. 어쨌든 가정이보기를 사용하여 수행 할 수 있습니다findById (android.R.id.content)가 Snackbars에 대해 null을 반환 할 수 있습니까?

:

나는 항상 내가 그것을 시도 할 때마다 작동하는 것 같다 경우에도이가 널이 될 수 있다는 경고가 그러나

findViewById(android.R.id.content)

. null 일 가능성은 언제입니까?

+0

당신은 AppCompatActivity에 있습니까? – Chol

+0

가 나는 보통 해요 중 하나가이 문제와 관련이있을 수있는 AppCompatActivity 또는 appCompatActivity를 들어 조각 –

+0

에서 : https://code.google.com/p/android/issues/detail?id=203345 – Chol

답변

3

findViewById 당신이를 찾을하려고하면 항상 null이 될 수있다 현재 레이아웃에 존재하지 않습니다.

경고는 단지 도움이됩니다. 아마 매우 일반적인 그리고 당신이 Activity 클래스의 소스 내부를 보면, 당신은이 방법을 발견 할 것이다 다음 Nullable 주석 그냥 여기 null 참조를 얻기의 가능성과이있을 수 있음을 컴파일러에게 알려

@Nullable 
public View findViewById(@IdRes int id) { 
    return getWindow().findViewById(id); 
} 

을 보푸라기가 이에 반응합니다. findViewById(android.R.id.content) 또는 findViewById(R.id.myCustomLayoutId)으로 다른 전화를 구별하는 방법을 알지 못합니다. 그러나 린트 체크를 직접 추가 할 수 있습니다. 당신이 Activity 내부에있어 때마다

안전하게 findViewById(android.R.id.content)를 사용할 수 있습니다. onCreateView가 호출 될 때마다 당신은 안전하게 Fragment 내부 getView()을 사용할 수 있습니다

.

+0

무엇 때 약 조각 안에 있지만 스낵 바를 전체 화면 하단에 표시하고 싶습니까? getActivity(). findViewById (android.R.id.content) 또는 무엇인가? –

+0

아, 네,'getActivity(). findViewById (android.R.id.content)'를 호출하여 루트 뷰를 얻을 수 있습니다. – Darwind

+0

또한 getView()가 null 일 수도 있음을 말하고 있습니다 - 동일한 아이디어입니까? null 일 수도 있지만 그렇지 않을 수도 있습니다. –

0

당신하지 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(); 
}