Android ImageView NullPointerException - PullRequest
       1

Android ImageView NullPointerException

4 голосов
/ 09 декабря 2010

У меня есть два изображения: красный и зеленый. У меня есть собственный ListView, который я хотел бы отображать красный свет, когда элемент списка неактивен, и зеленый свет, когда он активен. Элемент списка активируется при нажатии.

Вот мой код

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, выполняющее строку, которая устанавливает ресурс изображения. Поэтому я провел небольшое тестирование, удалил строку, задающую src в XML-файле, и просто попытался установить ее в основном классе. Все еще NPE. Поэтому я попытался не менять ресурс, а просто изменить альфа. Все еще NPE.

Я не уверен, что я делаю неправильно. Файлы light_off.png и light_on.png находятся в res/drawable-ldpi, и любой из них работает, когда я указываю их в XML. Но любое изменение, которое я пытаюсь внести в iconLight в основном файле, вызывает этот NPE. Есть идеи?

Ответы [ 2 ]

12 голосов
/ 09 декабря 2010

Единственный способ получить NPE на линии ...

iconLight.setImageResource(R.drawable.light_on);

Значение iconLight должно быть нулевым. Итак, ваш findViewById не работает. Вы установили свой макет перед вызовом findViewById? Вы уверены, R.id.iconLight находится в корневом макете Действия?

0 голосов
/ 15 июля 2012

У меня была такая же проблема.Вот код, который помог мне понять.Это для диалогового окна, но может помочь и вам.

    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.

...