addOnPreDrawListener()的在recycleView中使用的坑

addOnPreDrawListener()在recycleView的item中使用時,即使使用removeOnPreDrawListener(this),但是onPreDraw()還是會被不斷調用,阻塞ui線程。

approveTextView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                if(isFirst) {
                    try {
                        if(approveTextView.getViewTreeObserver().isAlive()) {
                            approveTextView.getViewTreeObserver().removeOnPreDrawListener(this);
                            isFirst = false;
                        }
                        int nameWidth = nameView.getMeasuredWidth();
                        ...
                    }catch (Throwable t){
                        t.printStackTrace();
                    }
                }
                return true;
            }
        });

解決辦法一:
加isFirst進行判斷,如上;
解決辦法二:
換用其他得到view寬度的方法:

approveTextView.post(new Runnable() {
            @Override
            public void run() {
                try {
                    int nameWidth = nameView.getMeasuredWidth();
                } catch (Throwable t) {
                    t.printStackTrace();
                }
            }
        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章