Как заставить представление перерисовываться непосредственно перед выполнением следующей строки кода
У меня есть 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
}
Команда сна находится там, чтобы проверить, происходит ли перерисовка до или после нее. Результат: после. Большинство вопросов по этой теме (например,Вот а такжеВот) скажем использовать invalidate () в представлении. Я использовал командыparentLayout.invalidate();
, parentLayout.postInvalidate();
, а такжеparentLayout.refreshDrawableState();
между фоном и линиями сна все безрезультатно. Перерисовка все еще происходит после команды сна. Может кто-нибудь сказать мне, как сделать это немедленно?
Другая, возможно полезная информация: LinearLayout привязан к строкам ListView, а описанный выше OnClickListener находится в пользовательском классе, который расширяет SimpleCursorAdapter, а не в самом действии. (Таким образом, я могу установить прослушиватель для каждой строки в ListView.)