Принудительный просмотр для перерисовки
Я создал пользовательский вид (позвоню ему 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")