개발하다보니 NestedScrollView 안에 RecyclerView 를 넣게되었는데

스크롤 동작은 정상적으로 작동되었지만

RecyclerView부분이 화면밖으로 나갔을 떄 그쪽까지 스크롤이 되지 않거나

아에 뷰가 안생기는 현상을 확인하였다


대충 아래와같은 그림이었는데...


///////////////////////////////////////////


<LinearLayout>


<android.support.v4.widget.NestedScrollView>


<LinearLayout>


<android.support.v7.widget.CardView>

</android.support.v7.widget.CardView>


<android.support.v7.widget.RecyclerView>

</android.support.v7.widget.RecyclerView>


</LinearLayout>

</android.support.v4.widget.NestedScrollView>

</LinearLayout>


/////////////////////////////////////////////


생각해보니 RecyclerView의 height길이가 고정이 아니라 NestedScrollView의 전체길이에

포함되지 않아 RecyclerView 부분이 잘린것 같다고 생각이 들었다.


그래서 RecyclerView의 height 속성에 고정으로 박아주니 그 크기만큼 잘 표시되었다.

(ex) 

<android.support.v7.widget.RecyclerView

    android:id="@+id/rv_lost_comment_list"

          android:layout_width="match_parent"

          android:layout_height="300dp"

/>


하지만 나같은 경우는 리사이클뷰에 아이템이 없을수도있고, 많이있을수도 있는데

저렇게 300dp로 고정하게되니 없어도 무조껀 저만큼 생기게되어 옮바른 해결방법이 아니라 생각하였다.


/////////////////////////////////////////////////////////


그래서 찾게된 해결방법은

xml에서가 아니라 java소스상에서 리사이클뷰에 들어갈 아이템 개수가 정해지면

그때 리사이클뷰의 height에 고정 길이를 부여하면 될것같아서 해보았다.


private void resizeCommentList(int item_size){

        ViewGroup.LayoutParams params = rvLostCommentList.getLayoutParams();

        params.height = 200 * item_size;

        rvLostCommentList.setLayoutParams(params);

}

//여기서 rvLostCommentList 는 findviewbyid로 잡은 리사이클뷰


이런식으로 아이템 갯수가 정해지면

(아이템 갯수) X (아이템 하나에 해당하는 예상 고정 길이)

해서 나온 값을 리사이클뷰의 height 속성에 부여하게 되면

아이템 갯수에 따라 길이가 잘 조정되었다.


+ Recent posts