AlertDialog에서 사용하기 위해 뷰를 부 풀릴 때 "뷰 루트로 null을 전달하지 마십시오"경고
as로 Avoid passing null as the view root
뷰를 부 풀릴 때 보푸라기 경고가 나타납니다 .null
parent
LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);
그러나 뷰는 on을 AlertDialog
사용하여 의 내용으로 사용 되므로으로 전달해야 할 내용을 모르겠습니다 .setView
AlertDialog.Builder
parent
parent
이 경우에 무엇이 있어야 한다고 생각 하십니까?
이 코드를 사용하여 경고없이 대화 상자보기를 확장하십시오.
View.inflate(context, R.layout.dialog_edit, null);
짧은 이야기는 parent
보기 인플레이션 시간에 알 수 없으므로 대화 상자의 뷰를 팽창시킬 때 null이되어야한다는 것입니다. 이 경우 경고를 피하기위한 세 가지 기본 솔루션이 있습니다.
- @Suppress를 사용하여 경고를 표시하지 않습니다
- View의 팽창 방법을 사용하여 View를 팽창시킵니다 . 이것은 LayoutInflater의 래퍼 일 뿐이며 대부분 문제를 난독 화합니다.
LayoutInflater에서의 사용보기 부풀려 전체 방법 :이전 버전의 Android Lint에서는 경고가 제거되었습니다. 1.0 이후 버전의 Android Studio에서는 더 이상 적용되지 않습니다.inflate(int resource, ViewGroup root, boolean attachToRoot)
. 설정attachToRoot
에false
.This은 부모가없는 것을 인플레이터를 알려줍니다.
확인 http://www.doubleencore.com/2013/05/layout-inflation-as-intended/을 ,이 문제의 큰 논의 끝에 특히 "모든 규칙은 예외를 가지고"섹션을 참조하십시오.
ViewGroup이 경고를 해결하면 null을 캐스팅합니다.
View dialogView = li.inflate(R.layout.input_layout,(ViewGroup)null);
개체 li
는 어디에 있습니까 LayoutInflater's
?
을 사용해야 AlertDialog.Builder.setView(your_layout_id)
하므로 팽창시킬 필요가 없습니다.
AlertDialog.findViewById(your_view_id)
대화 상자를 만든 후 사용하십시오 .
사용 (AlertDialog) dialogInterface
얻을 dialog
내부에 OnClickListener
다음 dialog.findViewById(your_view_id)
.
실제로 parent
(예 :에 대한 뷰 만들기 AlertDialog
)가 없으면을 전달하는 것 외에 다른 선택이 없습니다 null
. 경고를 피하려면 다음을 수행하십시오.
final ViewGroup nullParent = null;
convertView = infalInflater.inflate(R.layout.list_item, nullParent);
parent
대화 상자 에는를 지정할 필요가 없습니다 .
@SuppressLint("InflateParams")
재정의 맨 위에 사용하여 이것을 억제하십시오 .
AlertDialog는 내가 아는 한은 부모보기 대신 null을 안전하게 사용할 수 있다는 것 입니다. 이 경우 다음을 사용하여 경고를 억제 할 수 있습니다.
@SuppressLint ( "InflateParams")
일반적으로 SupressLint 또는 다른 답변에 언급 된 해결 방법 중 하나를 사용하여 경고를 제거해서는 안됩니다. 상위 뷰는 팽창중인 뷰의 루트 요소에 선언 된 레이아웃 매개 변수를 평가하는 데 필요합니다. 즉 , 부모 뷰 대신 null 을 사용 하면 루트 요소의 모든 레이아웃 매개 변수가 무시되고 기본 레이아웃 매개 변수로 바뀝니다. 대부분의 경우 문제가 없지만 경우에 따라 찾기 어려운 버그가 발생할 수 있습니다.
의 문서에서 View.inflate()
, 그것은 말한다
XML 리소스에서 뷰를 부풀립니다. 이 편리한 방법은 LayoutInflater
클래스를 래핑하여 뷰 인플레이션에 대한 모든 옵션을 제공합니다.
@param context The Context object for your activity or application.
@param resource The resource ID to inflate
@param root A view group that will be the parent. Used to properly inflate the layout_* parameters.
대신에
view = inflater.inflate(R.layout.list_item, null);
하다
view = inflater.inflate(R.layout.list_item, parent, false);
주어진 부모와 함께 팽창 시키지만 부모에게 첨부하지는 않습니다.
Coeffect에게 많은 감사 ( 그의 게시물에 링크 )
'IT박스' 카테고리의 다른 글
#if C #에서 디버그하지 않습니까? (0) | 2020.08.05 |
---|---|
디렉토리를 재귀 적으로 복사하는 배치 파일 (0) | 2020.08.05 |
터치 스크린에 대해 jQuery UI 'draggable ()'div 드래그 가능하게하려면 어떻게해야합니까? (0) | 2020.08.05 |
Google OAuth 2.0 API의 범위 목록은 어디에서 찾을 수 있습니까? (0) | 2020.08.04 |
Tortoise의 비 재귀 커밋은 어떻게 작동합니까? (0) | 2020.08.04 |