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

넘 힘들어서 질문올립니다. (리사이클러뷰 속에 커스텀뷰안에 또다른리사이클러뷰의 스크롤위치 초기화)

0 추천

현재 구조가 전체를 감싸는 세로 리사이클러뷰 안에서 동적으로 커스텀뷰를 생성해서 추가하는 구조입니다.

그리고 커스텀뷰안에는 또 가로스크롤이 되는 리사이클러뷰가 있는 구조입니다.

 

아래는 전체를 감싸는 세로 리사이클러뷰의 onBindViewHolder부분입니다.

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Log.i(TAG, "onBindViewHolder.. position : " + position);
    LinearLayout rootLay = holder.getRootLayout();
    rootLay.removeAllViews();

    if(position == mMainListItemArray.size() - 1){
        rootLay.setPadding(0,0,0,30);
    } else{
        rootLay.setPadding(0,0,0,0);
    }

    Main.MainListItem mainListItem = mMainListItemArray.get(position);
    String viewType = mainListItem.getView_type();
    String img_cnt = mainListItem.getImg_cnt();

    Log.d(TAG, "viewType : " + viewType + " img_cnt : " + img_cnt);

    if(viewType.equals("1")){ // 재생 화면
        Log.i(TAG, "내가본 재생동영상 진열");
        MoviePlayedViewPagerView playingMoviePagerView = new MoviePlayedViewPagerView(mActivity, mFragmentManager, mainListItem);
        holder.getRootLayout().addView(playingMoviePagerView);

    }else if(viewType.equals("0")){ //일반 카테고리
        if(img_cnt.equals("1")){ //추천 진열
            Log.d(TAG, "추천 영상 진열");
            MovieViewPagerView movieViewPagerView = new MovieViewPagerView(mActivity, mFragmentManager, mainListItem);
            holder.getRootLayout().addView(movieViewPagerView);
        }else if(img_cnt.equals("3")){ //일반 진열
            Log.i(TAG, "일반 진열 타입");
            CategoryView categoryView = new CategoryView(mActivity, mainListItem, mActivity);
            categoryView.setOnItemClickListener(mListener);
            categoryView.setOnCategoryClickListener(mListener);
            holder.getRootLayout().addView(categoryView);
        }
    }
}

타입에 따라서 만들어둔 커스텀뷰를 생성하여 전체를 감싸는 세로 리사이클러뷰의 해당 row의 레이아웃에 addView 시켜주는 방법으로 하였습니다.

그래서 뷰들은 다 잘올라가고 동작까지 다 잘되는데 문제는 안에 들어간 커스텀뷰에 있는 가로스크롤의 스크롤 위치가 자꾸 초기화가 되네요.

예를들어 첫번째 addView된 가로리사이클러뷰에서 리스트를 스크롤하다가

세로 리사이클러뷰를 아래로 좀 스크롤햇다가 다시 와보면 

가로 리사이클러뷰의 스크롤이 초기화가 되어 있습니다.

지금 위에 보시는 부분에서 혹시 문제가 있는건가 싶습니다.

계속 new를 해서 addView시켜서 커스텀뷰 안에 잇는 가로 리사이클러뷰의 스크롤위치가 초기화가 되는건 아닌지 생각이 드는데요..

해결방법이 통 생각이 나질 않아서 질문올립니다. 조언부탁드립니다. 고수님들 ㅠㅠ

갸아악 (21,260 포인트) 님이 2016년 10월 27일 질문

1개의 답변

0 추천
새로 new 로 생성하시게 되면 스크롤의 위치가 초기화 되는건 당연한것 같습니다.

가장 적게 건드리는 부분은 가로 스크롤시 스크롤의 위치를 MainListItem 에 저장해두었다가

가로 스크롤의 뷰가 초기화 될때 해당 포지션으로 이동하는것이 가장 간단해보입니다.
바램 (19,650 포인트) 님이 2016년 10월 27일 답변
답변 감사드립니다~
생각도 안하고 구조를 잡아놓으니 고생하네요 ㅠ
...