我搜索了很长时间,无法找到解决问题的方法。我正在尝试使用AutoCompleteTextView创建一个Dialog。我按照Android开发者网站上的教程进行操作,效果很好。我之前在Dialogs上使用过布局已经成功了,所以我觉得这也很容易。我为Dialog创建了一个布局,并确保AutoCompleteTextView具有ID。这是有趣的事情发生的地方......
dialog.setContentView(R.layout.auto_layout);
AutoCompleteTextView auto_tv = (AutoCompleteTextView)findViewById(R.id.role_ac);
这也是布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Role" />
<AutoCompleteTextView android:id="@+id/role_ac" android:layout_width="280dip" android:layout_height="wrap_content"/>
<Button android:layout_height="wrap_content"
android:layout_width="fill_parent" android:text="Done"
android:id="@+id/auto_doneButton" />
</LinearLayout>
由于某种原因,即使auto_tv确实存在于布局auto_layout中,它也是null。我能够在对话框中获得AutoCompleteTextView的唯一方法是以编程方式构建布局。当我尝试使用它时,为什么AutoCompletTextView为null?我忘记了布局中的某些内容,还是我没有正确构建对象?任何有关这方面的帮助将不胜感激。感谢。
答案 0 :(得分:2)
您在通话setContentView
和findViewById
时混合了两种不同的情境。在第一个语句中,您要设置对象dialog
的内容视图。在第二个声明中,您正在寻找父活动中的视图。您希望使用对话框对象进行两次调用。正确的语法应该是:
dialog.setContentView(R.layout.auto_layout);
AutoCompleteTextView auto_tv = (AutoCompleteTextView) dialog.findViewById(R.id.role_ac);
答案 1 :(得分:0)
确定。刚想通了。看着太多的代码来抓住我的错误。这是解决方案。
dialog.setContentView(R.layout.auto_layout);
AutoCompleteTextView auto_tv = (AutoCompleteTextView)dialog.findViewById(R.id.role_ac);
我需要指定使用Dialog的布局而不是使用dialog.findViewByID.
隐含的主应用程序布局