Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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")