У меня есть LinearLayout, что я хотел бы изменить цвет фона при нажатии одного из его дочерних представлений (ImageButton). Я могу это сделать, но не сразу - изменение не происходит на экране до более позднего времени (я думаю, во время вызова onResume). Я хотел бы узнать, как заставить макет перерисовывать после того, как фон установлен, перед выполнением следующей строки кода. Вот метод onClick моего OnClickListener для кнопки:
public void onClick(View v) {
LinearLayout parentLayout = (LinearLayout) v.getParent();
parentLayout.setBackgroundResource(R.color.my_color);
SystemClock.sleep(1000); //ms
}
Команда sleep находится там, чтобы проверить, происходит ли перерисовка до или после нее. Результат: после. Большинство вопросов по этой теме (например здесь и здесь) говорят о том, что для просмотра используется invalidate(). Я использовал команды parentLayout.invalidate();
, parentLayout.postInvalidate();
и parentLayout.refreshDrawableState();
между фоновыми и линиями сна, но все это не помогло. Повторное изменение все еще происходит после команды sleep. Может ли кто-нибудь сказать мне, как сделать это немедленно?
Другая полезная информация: LinearLayout привязан к строкам ListView, а OnClickListener выше в пользовательском классе, который расширяет SimpleCursorAdapter, а не в самой активности. (Таким образом, я могу установить слушатель для каждой из строк в ListView.)