当AlertDialog使用视图时,请避免“传递null作为视图根目录”警告
我得到了lint警告,当用null
作为parent
充气视图时Avoid passing null as the view root
,如下所示:
LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);
但是,该视图将被用作AlertDialog
的内容,在AlertDialog
使用AlertDialog.Builder
,所以我不知道应该作为parent
传递什么。
你觉得在这种情况下, parent
应该是什么?
使用下面的代码在没有警告的情况下膨胀对话视图:
View.inflate(context, R.layout.dialog_edit, null);
简而言之,当你膨胀一个对话视图的时候, parent
应该是空的,因为在查看通货膨胀时间它是不知道的。 在这种情况下,您有三个基本的解决scheme来避免警告:
- 使用@Suppress抑制警告
- 使用视图的膨胀方法膨胀视图。 这只是一个LayoutInflater的包装,大部分只是混淆了这个问题。
-
使用LayoutInflater的完整方法inflate(int resource, ViewGroup root, boolean attachToRoot)
视图:inflateinflate(int resource, ViewGroup root, boolean attachToRoot)
。将在较旧版本的Android Lint中,这样删除了警告。 1.0版本的Android Studio不再是这种情况。attachToRoot
设置为false
。这告诉attachToRoot
该父项不可用。
请查看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)
,所以你不需要夸大它。
创build对话框后使用AlertDialog.findViewById(your_view_id)
。
使用(AlertDialog) dialogInterface
获取(AlertDialog) dialogInterface
中的dialog
,然后dialog.findViewById(your_view_id)
。
当你真的没有任何parent
(例如为AlertDialog
创build视图)时,除了传递null
之外没有别的select。 所以这样做是为了避免警告:
final ViewGroup nullParent = null; convertView = infalInflater.inflate(R.layout.list_item, nullParent);
您不需要为对话框指定parent
。
在覆盖顶部使用@SuppressLint("InflateParams")
来抑制这一点。
而不是做
view = inflater.inflate(R.layout.list_item, null);
做
view = inflater.inflate(R.layout.list_item, parent, false);
它会用给定的父母夸大它,但不会将其附加到父母。
非常感谢Coeffect( 链接到他的文章 )