2010-12-09 143 views
4

我有两个图像,红灯和绿灯。我有一个自定义ListView,当列表项处于非活动状态时,我想显示红灯,并在活动时显示绿灯。按下时列表项目被激活。Android ImageView空指针异常

这里是我的代码

row.xml

<ImageView 
    android:id="@+id/iconLight" 
    android:src="@drawable/light_off" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

main.java

ImageView iconLight = (ImageView)findViewById(R.id.iconLight); 
iconLight.setImageResource(R.drawable.light_on); 

我得到一个NullPointerException执行设置的图像资源就行了。所以我做了一些测试,我删除了在XML文件中设置src的行,并试图将它设置在主类中。仍然是NPE。所以我尝试不改变资源,但只是改变阿尔法。仍是NPE。

我不知道我在做什么错。文件light_off.pnglight_on.png都在res/drawable-ldpi中,当我在XML中指定它们时,它们中的任何一个都可以工作。但是,我试图在主文件中对iconLight进行的任何更改都会导致此NPE。有任何想法吗?

+0

你能否把你整个文件粘贴到NPE? – Cristian 2010-12-09 01:15:37

+0

该文件相当于几百行。 – linsek 2010-12-09 01:17:29

回答

12

得到的线NPE的唯一途径...

iconLight.setImageResource(R.drawable.light_on); 

是对iconLight为空。所以,你的findViewById失败。在调用findViewById之前,您是否设置了布局?你确定 R.id.iconLight是否在Activity的根目录下?

0

我有同样的问题。这是帮助我理解的代码。这是一个对话窗口,但也可以帮助你。

final Dialog dialog = new Dialog(context); 
    dialog.setContentView(R.layout.custom); 
    dialog.setTitle("Title..."); 
    TextView text = (TextView) dialog.findViewById(R.id.text); 
    text.setText("Android"); 
    ImageView image = (ImageView) dialog.findViewById(R.id.image); 
    image.setImageResource(R.drawable.ic_launcher); 

看最后一行之前的行。注意它是如何实例化ImageView的。 无论如何,每次对图像的更改都是在setContentView之后进行的。