onLayoutChange () вызывается слишком много раз - PullRequest
1 голос
/ 13 марта 2019

Я пытаюсь обновить уменьшенное изображение после инициализации представления и знает его размеры

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       View pagerView = inflater.inflate(R.layout.fragment_reference, container, false);
       ......
        mPhotoView = pagerView.findViewById(R.id.reference_photo);
        mPhotoView.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
        Log.d(TAG,"Reference Pager PhotoView Layout Change."+" left: "+left+" top: "+top+" right: "+right+ " bottom: "+bottom);
        updatePhotoView();
    });
       ......
}

, но Logcat показывает, что оно вызывалось четыре раза подряд:

Reference Pager PhotoView Layout Change. left: 0 top: 0 right: 720 bottom: 436
Reference Pager PhotoView Layout Change. left: 0 top: 0 right: 720 bottom: 436
Skipped 59 frames!  The application may be doing too much work on its main thread.
Reference Pager PhotoView Layout Change. left: 0 top: 0 right: 720 bottom: 436
Reference Pager PhotoView Layout Change. left: 0 top: 0 right: 720 bottom: 436

Что является причиной этого?Как мне этого избежать?

1 Ответ

0 голосов
/ 13 марта 2019

Что вызывает это?

Вы никогда не удаляли слушателя. В результате onLayoutChange() вызывается несколько раз. Звоните removeOnLayoutChangeListener() на следующий взгляд:

mPhotoView.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
    v.removeOnLayoutChangeListener(this);  // this prevents the callback to be invoked multiple times
    Log.d(TAG,"Reference Pager PhotoView Layout Change."+" left: "+left+" top: "+top+" right: "+right+ " bottom: "+bottom);
    updatePhotoView();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...