Принудительный просмотр для перерисовки

Я создал пользовательский вид (позвоню ему MyView), который в принципе просто рисует какой-то текст сам по себе, используя холст. Текст, который нужно нарисовать, устанавливается с использованием глобальной переменной.

В какой-то момент во время выполнения программы я хочу изменить глобальную переменную и переделать MyView для обновления текста. Я пробовал findViewById(), а затем invalidate(), но это ничего не делает. Я подозреваю, что, поскольку ничего из MyView не изменилось, он считает, что нет причин для вызова onDraw(). Есть ли способ заставить View перерисовать себя, даже если он считает, что это не нужно?

Ответ 1

Если у меня есть переменная-член внутри MyView, которая хранит текст и создает для него публичный сеттер, то просто вызов этого метода заставляет MyView перерисовывать себя

Установка переменной внутри View не вызовет ничью в представлении. На самом деле, ни система представления не знает, ни заботится о внутренних переменных.

Вызов invalidate() в представлении вызывает его рисование через представление. Вы должны это проверить: http://developer.android.com/guide/topics/ui/custom-components.html.

A TextView внутренне аннулирует себя при вызове setText() и перерисовывает себя с новым текстом, установленным с помощью вызова setText(). Вы также должны сделать что-то подобное.

Ответ 2

Хорошо, поэтому я понял это. Если у меня есть переменная-член внутри MyView, которая хранит текст и создает для него общедоступный набор, то просто вызов этого метода заставляет MyView перерисовывать себя. Простой!

Ответ 3

ответ: Вы можете обновить и заново создать мероприятие и сохранить данные, отправив их с помощью намерения.

public void refresh() {
   Intent intent = getIntent();
   intent.putExtra("extra_id",details);   
   overridePendingTransition(0, 0);
   intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
   finish(); 
   overridePendingTransition(0, 0); 
   startActivity(intent); 
   }

и получить его в onCreate

details=getIntent().getStringExtra("extra_id")

Ответ 4

ответ: Вы можете обновить и заново создать мероприятие и сохранить данные, отправив их с помощью намерения.

public void refresh() {
   Intent intent = getIntent();
   intent.putExtra("extra_id",details);   
   overridePendingTransition(0, 0);
   intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
   finish(); 
   overridePendingTransition(0, 0); 
   startActivity(intent); 
   }

и получить его в onCreate

details=getIntent().getStringExtra("extra_id")