膨胀视图时找不到 xml id
Posted
技术标签:
【中文标题】膨胀视图时找不到 xml id【英文标题】:Can't find xml id while inflating view 【发布时间】:2011-06-27 08:34:08 【问题描述】:我正在尝试扩充自定义警报对话框,但遇到了一些奇怪的事情。
layout = inflater.inflate(R.layout.call_or_sms_dialog,(ViewGroup)findViewById(R.id.contacts));
inflate() 方法有 2 个参数,要膨胀的资源和作为生成对话框的父级的可选视图。我的问题出在可选视图部分。
我无法从 findViewById(R.id.contacts) 中找到根视图的 ID。 “联系人”是一个 xml 文件,其中包含此特定活动的控件。我能够引用其他活动的其他 xml 文件,但无法引用此 contacts.xml。
我尝试在 Eclipse 上进行“干净”构建并重新生成 R.java,但仍然没有帮助。有没有办法手动生成“contacts.xml”的ID呢?
【问题讨论】:
【参考方案1】:“联系人”是一个 xml 文件,其中包含此特定活动的控件
如果是 XML,则无法使用 R.id
访问;但类似R.xml
或R.layout
。当然,如果你使用findViewById
,你必须传递一个有效的id(R.id
引用的东西)。所以......你要做的是给你想要引用的视图一个ID;例如:
<ViewGroup
android:id="@+id/contacts"
blah
另外,请记住,如果您直接使用findViewById
方法,则ID 必须是当前布局的一部分(我的意思是setContentView
中设置的布局)。如果 ID 不属于当前布局,您将需要执行类似 referenceToTheViewContainingTheIDResource.findViewById()
的操作。
【讨论】:
谢谢克里斯蒂安。似乎 R.layout 可以解决问题。我有另一个活动在做同样的事情,但可以通过 R.id 引用该布局。它也是一个xml文件。事实上,我可以参考我目前正在做的 2 个 xml 文件。为什么会这样? 无法使用R.id
引用布局。如果以与布局相同的方式调用 XML 资源的 ID,则您似乎是通过 R.id
引用布局,但实际上您不是:P
我明白了。所以这意味着我最好用 R.layout 来引用,对吗?再次感谢您,我多么希望有一个 +2 按钮。 ;)【参考方案2】:
Please try this code:
LayoutInflater inflater = LayoutInflater.from(this);
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("SET YOUR TITLE");
View view = inflater.inflate(R.layout.call_or_sms_dialog, null);
v = (ViewGroup)findViewById(R.id.contacts);
alertDialog.setView(view);
【讨论】:
【参考方案3】:第二个参数是一个现有的视图,而不是你正在膨胀的布局的根视图。这是问题吗?您始终可以将 null
作为第二个参数传递。
【讨论】:
感谢 Ted 的回复。我尝试输入 null 但它不起作用。有一个例外。以上是关于膨胀视图时找不到 xml id的主要内容,如果未能解决你的问题,请参考以下文章