Android NPE при изменении ImageView из другого макета - PullRequest
0 голосов
/ 24 июля 2011

Я пытаюсь изменить ImageView в другом макете, используя код и т. Д .:

        ImageView imageView;
        imageView = (ImageView) findViewById(R.id.imageView1);

        imageView.setImageResource(R.drawable.wizardhat);

Но это NPE на R.drawable.wizardhat, потому что он, очевидно, не знает, к какому макету он принадлежит, и его нет в корневом макете:

-основная [где находятся оба включения]
-layout1 [где включен код]
-layout2 [где находится изображение]

РЕДАКТИРОВАТЬ: Хорошо, я действительно не объяснил это: представление, в котором работает код находится внутри табуляции. Макет, который содержит представление вкладок, содержит включение в макет, который содержит ImageView, который я пытаюсь редактировать. Я не правильно сформулировал свой вопрос, сейчас я его отредактирую: L

Возможно ли это? Спасибо:)

Ответы [ 2 ]

0 голосов
/ 24 июля 2011

То, что я сделал для своего приложения, было:

inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);   
layout = inflater.inflate(R.layout.play_grid,(ViewGroup)findViewById(R.id.play_layout_root));
gridview = (GridView)layout.findViewById(R.id.play_gridview); 
  • play_grid - это xml, который содержит gridview
  • play_layout_root - корневой идентификатор этого макета xml;
  • play_gridview - это идентификатор нужного мне вида сетки.

Возможно, вы можете использовать это для своей проблемы.

0 голосов
/ 24 июля 2011

На самом деле, это NPE на imageView, поэтому прежде чем надувать какое-либо представление, вы должны установить его корневой макет как представление содержимого вашей деятельности. Если ваш ImageView относится к layout1, вы должны быть уверены, что это текущее представление содержимого действия, тогда вы можете раздувать его откуда угодно в своем коде. Если layout1 не является просмотром содержимого прямо сейчас, findViewById() вернет ноль. Надеюсь, я правильно понял ваш вопрос.

...