我正在尝试给自定义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?
答案 0 :(得分:3)
“contacts”是一个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()
的内容。
答案 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
作为第二个参数传递。