0

我正在尝试扩充自定义警报对话框并遇到一些奇怪的事情。

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?

4

3 回答 3

3

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

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

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

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

于 2011-02-15T04:29:46.873 回答
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);
于 2011-06-25T12:33:52.180 回答
0

第二个参数是一个现有的视图,而不是你正在膨胀的布局的根视图。这是问题吗?你总是可以null作为第二个参数传递。

于 2011-02-15T04:36:57.417 回答