Измените ImageButton's Image программно [дублировать]

Симон Моурир дал этот пример :

object o = null;
DateTime d = (DateTime)o;  // NullReferenceException

, где unboxing преобразование (литье) из object (или из одного из классов System.ValueType или System.Enum или из типа интерфейса) - тип значения (кроме Nullable<>) сам по себе дает NullReferenceException.

В другом направлении конверсия бокса из a Nullable<>, которая имеет HasValue, равную false , на ссылочный тип, может дать ссылку null, которая затем может привести к NullReferenceException. Классический пример:

DateTime? d = null;
var s = d.ToString();  // OK, no exception (no boxing), returns ""
var t = d.GetType();   // Bang! d is boxed, NullReferenceException

Иногда бокс происходит по-другому. Например, с помощью этого не общего метода расширения:

public static void MyExtension(this object x)
{
  x.ToString();
}

следующий код будет проблематичным:

DateTime? d = null;
d.MyExtension();  // Leads to boxing, NullReferenceException occurs inside the body of the called method, not here.

Эти случаи возникают из-за специальных правил, используемых во время выполнения при боксе Nullable<> экземпляров.

3
задан citizen conn 19 July 2011 в 19:28
поделиться

3 ответа

Метод invalidate() заставит перерисовать любое представление:

Drawable replacer = getResources().getDrawable(R.drawable.replacementGraphic);
linearButton.setBackgroundDrawable(replacer);
linearButton.invalidate();

См. здесь для справки.

7
ответ дан pqn 23 August 2018 в 23:27
поделиться

«Правильный» ответ должен быть обновлен.

setBackgroundDrawable() устарел в API 16

setBackground() был добавлен в API 16

A лучшим ответом может быть:

int replace = R.drawable.my_image;
myButton.setBackgroundResource(replace);
myButton.invalidate();

или просто:

myButton.setBackgroundResource(R.drawable.my_image);
myButton.invalidate();

Будет работать с уровня API 1-18

4
ответ дан EGHDK 23 August 2018 в 23:27
поделиться

Попробуйте этот

linearButton.setImageResource(R.drawable.replacementGraphic);

Надеюсь, он должен работать

0
ответ дан Sandeep Reddy M 23 August 2018 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: