【问题标题】:Can't find xml id while inflating view膨胀视图时找不到 xml id
【发布时间】: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呢?

【问题讨论】:

    标签: android android-widget android-layout android-xml


    【解决方案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 但它不起作用。有一个例外。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多