• 로그인 함 해보끄나?

  • Sarangnamu.net June 17, 2003
    Home Login Profile Study Open Project Q&A Google Code
    RecyclerView + GridLayoutManager 이용시 row 넣기
    Last Modify : 08 February, 2018(04:03)
    GridLayoutManager 를 이용해 RecyclerView 를 구성하였는데 중간 중간에 Group 구분을 주기 위해서 Bar 형태의 View 를 추가해야 되는 요청 사항이 생겼다. 여기저기 검색을 하다간 찾은 내용으로는 (https://stackoverflow.com/questions/42339650/custom-view-row-in-recyclerview-with-gridlayoutmanager) GridLayoutManager 에 setSpanSizeLookup 을 이용하면 되는 것 이였고 데이터 입력 시 ViewType 을 기준으로 반환하는 span 크기를 다르게 하면 되었다. 일반적인 Grid 의 경우 1 을 전달하면되고 Bar 형태의 경우 Grid 의 최대 개수를 (HTML 에서 rowspan, colspan 을 생각하면 된다.) 전달 하면 된다. final GridLayoutManager mng_layout = new GridLayoutManager(this.getActivity(), 2); mng_layout.setSpanSizeLookup( new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch( recyclerAdapter.getItemViewType(position) ) { case MyRecyclerAdapter.TYPE_SINGLE: return 1; case MyRecyclerAdapter.TYPE_DEFAULT: return 2; default: return -1; } } }); myRecyclerView.setLayoutManager(mng_layout); @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = null; if (viewType==TYPE_DEFAULT) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_grid_view_item, parent, false); return new DefaultViewHolder(view); } else if (viewType==TYPE_SINGLE){ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_grid_view_header, parent, false); return new SingleItemViewHolder(view); } throw new RuntimeException("There is no type that matches the type " + viewType + " + make sure your using types correctly"); } @Override public int getItemViewType(int position) { return (list.get(position).getType()==TYPE_DEFAULT) ? TYPE_DEFAULT : TYPE_SINGLE; }

    Comment


    입력하3 1527203506



    Locations of visitors to this page