IT박스

AlertDialog에서 사용하기 위해 뷰를 부 풀릴 때 "뷰 루트로 null을 전달하지 마십시오"경고

itboxs 2020. 8. 5. 08:01
반응형

AlertDialog에서 사용하기 위해 뷰를 부 풀릴 때 "뷰 루트로 null을 전달하지 마십시오"경고


as로 Avoid passing null as the view root뷰를 부 풀릴 때 보푸라기 경고가 나타납니다 .nullparent

LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);

그러나 뷰는 on을 AlertDialog사용하여 의 내용으로 사용 되므로으로 전달해야 할 내용을 모르겠습니다 .setViewAlertDialog.Builderparent

parent이 경우에 무엇이 있어야 한다고 생각 하십니까?


이 코드를 사용하여 경고없이 대화 상자보기를 확장하십시오.

View.inflate(context, R.layout.dialog_edit, null);

짧은 이야기는 parent보기 인플레이션 시간에 알 수 없으므로 대화 상자의 뷰를 팽창시킬 때 null이되어야한다는 것입니다. 이 경우 경고를 피하기위한 세 가지 기본 솔루션이 있습니다.

  1. @Suppress를 사용하여 경고를 표시하지 않습니다
  2. View의 팽창 방법을 사용하여 View를 팽창시킵니다 . 이것은 LayoutInflater의 래퍼 일 뿐이며 대부분 문제를 난독 화합니다.
  3. LayoutInflater에서의 사용보기 부풀려 전체 방법 : inflate(int resource, ViewGroup root, boolean attachToRoot). 설정 attachToRootfalse.This은 부모가없는 것을 인플레이터를 알려줍니다. 이전 버전의 Android Lint에서는 경고가 제거되었습니다. 1.0 이후 버전의 Android Studio에서는 더 이상 적용되지 않습니다.

확인 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")재정의 맨 위에 사용하여 이것을 억제하십시오 .


  1. AlertDialog는 내가 아는 한은 부모보기 대신 null을 안전하게 사용할 수 있다는 것 입니다. 이 경우 다음을 사용하여 경고를 억제 할 수 있습니다.

    @SuppressLint ( "InflateParams")

  2. 일반적으로 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에게 많은 감사 ( 그의 게시물에 링크 )

참고 URL : https://stackoverflow.com/questions/26404951/avoid-passing-null-as-the-view-root-warning-when-inflating-view-for-use-by-ale

반응형