AutoCompleteTextView NullPointer异常

时间:2010-11-23 18:45:01

标签: android

我搜索了很长时间,无法找到解决问题的方法。我正在尝试使用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?我忘记了布局中的某些内容,还是我没有正确构建对象?任何有关这方面的帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

您在通话setContentViewfindViewById时混合了两种不同的情境。在第一个语句中,您要设置对象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.隐含的主应用程序布局