마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

scrollview 안의 recyclerview 문제

0 추천
RecyclerView 여러개를 연달아서 세로로 나열하고자 합니다.

그러자면 ScrollView 에다 넣어야 할텐데

넣고보면 모든 RecyclerView 가 height 0 이 되어 안 보이네요 ㅜㅠ

스크롤뷰 안에 스크롤되는 뭔가를 넣지마라는 권고사항은 검색해봐서 알고있지만..

그렇게 안하고서는 여러 리스트를 연달아 뿌려줄 수가 없지 않나요?

하나의 RecyclerView 에 viewtype 을 다르게 해서 position 계산해가며 합치자니 코드가 엉망이 되어가고...

recyclerview 의 height 를 딱 정해줘버리면 된다지만

리스트 아이템들이 높이가 들쑥날쑥해서 갯수 × 1개 높이 해도 짤려보이거나 여백이 남고...

height 를 정확히 계산해준다는 linearlayoutmanager 상속받아서 만들어둔 클래스는

잘되는가 싶더니 역시나 정확히는 계산해주지 못하네요 ㅠㅠ

listview 였을때는 계산해주는 함수를 적용하니 딱 맞아떨어졌었는데 recyclerview 는 참 이상하네요

listciew 보다 recyclerview 가 뭔가 더 좋고 신식? 이라 바꾼건데.. 원복해야하나 싶기도 하네요


뭔가 획기적인 방법 있으신 분!?
열혈남아 (200 포인트) 님이 2015년 8월 6일 질문

1개의 답변

+2 추천
스크롤뷰를 굳이 넣으실 필요 없습니다.

1. 타입별로 클래스를 생성

2. RecyclerView.Adapter 를 상속받은 Adapter 구현.

 public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

  public MyAdapter(ArrayList<ClassName> items){
        this.items = items;
    }

.....

3. 현재 아이템이 어떤 타입인지 어뎁터에게 알려줌.

   @Override

   public int getItemViewType(int position) {

    int type = 0;
        if(items.get(position) instanceof ...){
            type = TYPE1;
        }else if(items.get(position) instanceof ...){
            type = TYPE2
        }
        else if(items.get(position) instanceof ...){
            type = TYPE3
        } else if ....

        return type;
    }

4. @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

   switch(viewType){

   // 타입별 뷰홀더 생성.

   }

  return viewHolder.

}

5. @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

   switch (viewHolder.getItemViewType()) {

   타입별 뷰 홀더 적용.

   }

}

 

참고 해보세요..

https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView
J30n 님이 2016년 4월 7일 답변
...