Android TV中使用RecyclerView左右长按或者连续按键焦点飞掉的问题

Android TV中使用RecyclerView左右长按或者连续按键焦点飞掉的问题:
复写LinearLayoutManager 的onInterceptFocusSearch方法:

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext){
    
    
            @Nullable
            @Override
            public View onInterceptFocusSearch(@NonNull View focused, int direction) {
    
    
                int count = getItemCount();
                int fromPos = getPosition(focused);
                int lastVisibleItemPos = findLastVisibleItemPosition();
                int spanCount = lastVisibleItemPos - fromPos;
                if (AppConfigurationUtils.isRtl && direction == View.FOCUS_RIGHT) {
    
    
                    direction = View.FOCUS_LEFT;
                } else if (AppConfigurationUtils.isRtl && direction == View.FOCUS_LEFT) {
    
    
                    direction = View.FOCUS_RIGHT;
                }
                switch (direction) {
    
    
                    case View.FOCUS_RIGHT:
                        fromPos++;
                        break;
                    case View.FOCUS_LEFT:
                        fromPos--;
                        break;
                }
                if (fromPos < 0 || fromPos >= count) {
    
    
                    return focused;
                } else {
    
    
                    if (fromPos > lastVisibleItemPos) {
    
    
                        scrollToPosition(fromPos);
                    } else {
    
    
                        int pos = lastVisibleItemPos - spanCount > 0 ? lastVisibleItemPos - spanCount : 0;
                        scrollToPosition(pos);
                    }
                }
                return super.onInterceptFocusSearch(focused, direction);
            }
        };```

猜你喜欢

转载自blog.csdn.net/lb687/article/details/130891526