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
대화 상자 .
@SuppressLint("InflateParams")
재정의 맨 위에 사용하여 이것을 억제하십시오 .
답변
실제로 parent
(예 :에 대한 뷰 만들기 AlertDialog
)가 없으면을 전달하는 것 외에 다른 선택이 없습니다 null
. 경고를 피하려면 다음을 수행하십시오.
final ViewGroup nullParent = null;
convertView = infalInflater.inflate(R.layout.list_item, nullParent);
답변
-
AlertDialog는 내가 아는 한 안전하게 null을 안전하게 사용할 수 있다는 것입니다. 부모보기 대신 입니다. 이 경우 다음을 사용하여 경고를 억제 할 수 있습니다.
@SuppressLint ( “InflateParams”)
-
일반적으로 SupressLint 또는 다른 답변에 언급 된 해결 방법 중 하나를 사용하여 경고를 제거해서는 안됩니다. 부모 뷰는 팽창되는 뷰의 루트 요소에 선언 된 레이아웃 매개 변수를 평가하는 데 필요합니다. 즉 , 부모보기 대신 null 을 사용 하면 루트 요소의 모든 레이아웃 매개 변수가 무시되고 기본 레이아웃 매개 변수로 바뀝니다. 대부분의 경우 문제가 없지만 경우에 따라 찾기 어려운 버그가 발생할 수 있습니다.