在膨胀视图时找不到xml id

时间:2011-02-15 04:23:36

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

我正在尝试给自定义alertdialog充气并遇到一些奇怪的事情。

layout = inflater.inflate(R.layout.call_or_sms_dialog,(ViewGroup)findViewById(R.id.contacts));

inflate()方法接受2个参数,要充气的资源和可选视图是生成的对话框的父视图。我的问题出现在可选的视图部分。

我找不到findViewById(R.id.contacts)的根视图的id。 “contacts”是一个xml文件,其中包含此特定活动的控件。我能够引用其他活动的其他xml文件,但是无法引用此contacts.xml。

我尝试在Eclipse上进行“干净”构建并重新生成R.java,但它仍然无济于事。有没有办法手动生成“contacts.xml”的ID?

3 个答案:

答案 0 :(得分:3)

  
    

“contacts”是一个xml文件,其中包含此特定活动的控件

  

如果是XML,则无法使用R.id访问它;但是R.xmlR.layout之类的东西。当然,如果您使用的是findViewById,则必须传递有效的ID(由R.id引用的内容)。所以......你要做的就是给你要引用的视图提供一个ID;例如:

<ViewGroup
   android:id="@+id/contacts"
   blah

另外,请记住,如果直接使用findViewById方法,则ID必须是当前布局的一部分(我的意思是setContentView中设置的布局)。如果ID不属于当前布局,则需要执行类似referenceToTheViewContainingTheIDResource.findViewById()的内容。

答案 1 :(得分: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);

答案 2 :(得分:0)

第二个参数是现有视图,而不是您要膨胀的布局的根视图。这是问题吗?您始终可以将null作为第二个参数传递。