Я хочу заставить перерисовывать / обновлять основной вид ресурсов макета, скажем, методом Activity.onResume (). Как я могу это сделать ?
Под основным представлением макета я имею в виду тот («R.layout.mainscreen» ниже), который вызывается в моем Activity.onCreate (), например:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainscreen);
}
Ответы:
Чтобы строго ответить на вопрос: используйте invalidate ():
Теперь, когда действие возобновляется, он заставляет каждый вид рисовать сам. Не нужно вызывать invalidate (). Чтобы применить тему, убедитесь, что вы делаете это до того, как будет нарисовано любое представление, т.е.
setContentView(R.layout.mainscreen);
Ссылка на документацию по API находится здесь: http://developer.android.com/reference/android/view/ContextThemeWrapper.html#setTheme%28int%29
Поскольку метод onDraw () работает с уже созданными экземплярами Views, setTheme работать не будет. У меня нет опыта работы с темами, но я могу подумать о двух альтернативных вариантах:
источник
Пытаться
getWindow().getDecorView().findViewById(android.R.id.content).invalidate();
источник
Попробуйте,
recreate()
это приведет к воссозданию этого занятия.источник
onResume
методе. Это дает мне бесконечный цикл: /Решение:
Ребята, я перепробовал все ваши Решения, но они не сработали для меня, я должен установить для setVisibility EditText значение VISIBLE, и этот EditText должен быть виден тогда в ScrollView , но я не смог обновить представление root для вступления в силу. Я решил свою проблему, когда мне нужно обновить вид, поэтому я изменил видимость ScrollView на GONE, а затем снова установил его на VISIBLE, чтобы он вступил в силу, и это сработало для меня. Это не точное решение, но оно только сработало.
источник
Вызов
invalidate()
илиpostInvalidate()
корневой макет явно НЕ гарантирует, что дочерние представления будут перерисованы. В моем конкретном случае мой корневой макет был TableLayout и имел несколько дочерних классов класса TableRow и TextView. ВызовpostInvalidate()
, илиrequestLayout()
дажеforceLayout()
на корневой объект TableLayout не вызывает никаких TextViews в макете , чтобы быть перерисованы.Итак, в итоге я рекурсивно проанализировал макет, ища эти TextViews, а затем вызвал
postInvalidate()
каждый из этих объектов TextView.Код можно найти на GitHub: https://github.com/jkincali/Android-LinearLayout-Parser
источник
В противном случае вы можете попробовать это также
источник
Просто установите ваш контент в onresume
setContentView (R.layout.yourview) внутри onResume ..
Пример:
источник
Попробуйте обойти эту проблему:
источник
Это позволяет перезагрузить с изменениями темы и скрывает анимацию.
источник
У меня тоже была эта проблема, но, следуя указаниям Фархана по использованию,
setContentView()
я сделал именно это. использованиеsetContentView()
само по себе было недостаточно, однако. Я обнаружил, что должен был заселить все свои взгляды информацией. Чтобы исправить это, я просто вытянул весь этот код в другой метод (я назвал его сборкой), а в своемonCreate
методе я просто вызвал эту сборку. Теперь, когда происходит мое событие, я хочу, чтобы моя деятельность «обновлялась», я просто вызываю сборку, сообщаю ему новую информацию (которую я передаю в качестве параметров для сборки), и у меня появляется обновленное действие.источник
Это похоже на известную ошибку .
источник
Я не знаю, безопасно это или нет, но это сработало для меня. Я вроде столкнулся с этой проблемой я и попытался
invalidate()
и ,requestLayout()
но безрезультатно. Так что я простоonCreate(null)
перезвонил, и это сработало. Если это небезопасно, пожалуйста, дайте мне знать. Надеюсь, это поможет кому-то там.источник
Так я обновлял свой макет
источник
Чтобы очистить представление, расширяющее ViewGroup, вам просто нужно использовать метод
removeAllViews()
Так же, как это (если у вас есть ViewGroup называется
myElement
):источник
Попробуй это
источник
Не уверен, что это хороший подход, но я просто каждый раз так называю:
источник
Просто снова вызовите действие, используя намерение. Например, чтобы обновить макет MainActivity, сделайте так:
источник