膨胀视图时找不到 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.xmlR.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的主要内容,如果未能解决你的问题,请参考以下文章

部署到生产时找不到索引视图?

使用 slug 和基于类的视图时找不到视图

Spring 确实存在时找不到 bean xml 配置文件

从 JAR 文件运行应用程序时找不到 hibernate.cfg.xml 错误

GridView控件更新时找不到id

播种时找不到表