0

У меня головная боль в текущем проекте Android. Я хочу определить изменение текущей страницы. Например, есть TextView для отображения времени устройства, которое обновляется в секунду. Как определить это изменение? Я много искал на SO (спасибо ТАК), но никто не работает для меня.Android - onGlobalLayout не вызывается ViewTreeObserver

Дополнительная информация: Я не использую стандартную активность для создания страницы. Мой путь: Все виджеты создаются в объект View, который затем используется для создания объекта-контейнера. После этого я просто обрабатываю этот контейнер, чтобы рисовать на холсте с помощью VSYNC обратный вызов Choreographer.FrameCallback периодически.

Действительно, он работает, чтобы нарисовать. Все в порядке. За исключением: Я хочу нарисовать холст только при изменении содержимого страницы. Итак, вернемся к моему начальному вопросу, как обнаружить это «меняющееся» событие? Я уверен, что есть какой-то обратный вызов для решения этой проблемы. Я использовал следующее решение, но onGlobalLayout не вызывается при изменении текста в тексте.

CanvasAppViewContainer container;//CanvasAppViewContainer extends AbsoluteLayout 
LayoutInflater li =(LayoutInflater)getService().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  

View view = li.inflate(resourceId, null);//passed a correct the layout id 
container = new CanvasAppViewContainer(getService(), view, getWidth(), getHeight(), getSurface()); 
rootView = (LinearLayout) findViewById(R.id.rootView); //root element of layout 
rootView.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() { 
    @SuppressLint("NewApi") 
    @Override 
    public void onGlobalLayout() { 
     Log.d("test", "onGlobalLayout"); 
    } 
}); 

КСТАТИ: Даже если я зарегистрировать вид дерева наблюдателя для TextView, onGlobalLayout до сих пор не называется.

Благодаря

ответ

0

onGlobalLayout() только вызывается, когда макета изменения. Если вы хотите обнаружить изменение в тексте TextView.addTextChangedListener()

+0

Спасибо. Фактически, если наблюдатель дерева просмотра регистров для текстового просмотра, когда текст изменен, onGlobalLayout() также вызывается при нормальной работе. – Vincent

+0

Возможно, изменение текста заставляет TextView изменять его размер, который вызывает OnGlobalLayout() в вашей «нормальной» активности? – murf

+0

Я просто повторяю один и тот же текст. – Vincent

Смежные вопросы