2016-08-15 2 views
11

3 개의 하위보기가있는 부모 recyclerview가 있습니다. 아이의 마지막 두 명은 recyclerview입니다.중첩 된 Recyclerview 자체적으로 스크롤합니다.

Parent recyclerview 
- child view 1 
- child view 2 (horizontal rv) 
- child view 3 (horizontal rv) 

문제는이 단편이 표시 될 때마다, 그것은 child view 2의 아래쪽에 정렬 자체 스크롤.

부모 rv가 스크롤을 수신하도록 설정했습니다.

dy: 108 
dy: 72 
dy: 75 
dy: 62 
dy: 48 
dy: 42 
dy: 34 
dy: 27 
dy: 22 
dy: 16 
dy: 12 
dy: 10 
dy: 7 
dy: 5 
dy: 3 
dy: 3 
dy: 1 
dy: 1 
dy: 1 

그것은 child view 2 RV에 0로 설정되어 부모 recyclerview의 시작 dy 것 같아 : 이것은 내가 끝낼 것입니다. 그 위의 모든 것은 가치가 있습니다. 그러나, 나는 그것이 원인인지를 여전히 밝혀 내고 있으므로 확실하지 않습니다.

수정 사항?

답변

64

우리는 비슷한 문제가 있습니다. 우리는 세로 RecyclerView입니다. 이 카테고리의 각 항목 RecyclerView은 Android TV 앱처럼 가로 RecyclerView입니다.

지원 라이브러리를 23.4.0에서 24.0.0으로 업그레이드 할 때 자동 스크롤이 갑자기 나타납니다. 특히 Activity을 열고 다시 이동하면 가로 RecyclerView이 위로 스크롤되어 현재 가로 RecyclerView 행이 잘리지 않고 행이 완전히 표시됩니다.

쉽게 해결할 수 있습니다. 당신의 외부/부모RecyclerView이 추가 :

android:descendantFocusability="blocksDescendants" 

나는이 문제에 해결책을 발견했습니다

은 또한, 나는했습니다 발견 된 another solution도 작동합니다. 이 경우 수직 RecyclerViewFrameLayout 안에 있습니다. 이 FrameLayoutandroid:focusableInTouchMode="true"을 추가하면 문제가 해결됩니다.

그런데 open issue on the AOSP도 있습니다.

+0

막 초 작업 ... –

+1

분명히하기 위해서는 자동으로 스크롤하는'RecyclerView'의 부모에 이것을 추가해야합니다. – Pei

+0

나는 이것을 결코 이해하지 못했을 것이다. –

2

아, 저는 고심하고 있습니다. 솔루션은 실제로 매우 간단합니다. 나와 (앞으로 동일한 문제에 직면 한 다른 누구에게도) 참고로, 나는 자식보기의 rv에서 false으로 setFocusable()을 가져야하며 조각이 표시 될 때 더 이상 해당보기에 집중하지 않습니다.

필자의 경우 데이터가 API에서로드 된 후에 프로그래밍 방식으로 설정해야합니다.

+0

horizontalRV.setLayoutManager( new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, true)); 

를 교체했다. 감사. 루트 recyclerview 인스턴스가 포커스 가능으로 false로 플래그되어야하는 인스턴스인지 확인해야합니다. –

2

시도해보십시오. android:descendantFocusability="blocksDescendants" 그것은 나를 위해 문제를 해결했습니다.

0

짧은 힌트 답을 @albertvilacalvo합니다 : 프로그래밍 RecyclerView를 사용하는 경우, 당신이 그런 식으로 setFocusableInTouchMode 처리 할 수 ​​있습니다 (귀하의 RecyclerView 클래스에 포함)

@Override 
protected void onAttachedToWindow() { 
    ((View) getParent()).setFocusableInTouchMode(true); 
    super.onAttachedToWindow(); 
} 

descendantFocusability 솔루션은 실패 당신이 당신의 아이 뷰에 글고 치기를해야하는 경우 , 그들은 더 이상 커서를 얻지 못할 것입니다. 내 RecyclerView 하위 항목에서 ListView, 사용자 정의 (다중) 터치 및 EditText를 사용하고 있습니다. 지금까지 setFocusableInTouchMode를 사용하여 부작용이 없습니다.

0

긴 검색 후에 나는 사실로 설정된 reverseLayout 매개 변수에 대한 내 눈을.습니다. 나는이 그것을 해결했다

horizontalRV.setLayoutManager(
    new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)); 
관련 문제