본문으로 바로가기

RecycleView 란?

category Android 2016. 4. 24. 23:49
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

RecyclerView


RecyclerView는 ListView처럼 제한된 화면에 대용량 데이터 셋을 보여줄 때 사용합니다.

ListView 비슷하지만 RecyclerView는 아이템 클릭 리스너와 같은 기능들을 직접 구현해주셔야 합니다.


RecyclerView.Adapter을 이용하여 Child View가 제공되고, RecyclerView.LayoutManager을 상속받은 LinearLayoutManager, GridLayoutManager, StaggeredGridLayoutManager등을 이용하여 화면에 ChildView가 배치됩니다.


RecyclerView.Adapter은 RecyclerView.ViewHolder을 상속받은 Class의 객체를 RecyclerView에 넘겨주고, RecyclerView는 ViewHolder에서 View를 얻어 화면에 출력한다.


LayoutManager은 Orientation을 가지고 있어 Child View를 가로나 세로로 배치하여 보여줄 수 있습니다. 



RecyclerView import

RecyclerView를 사용하기 위해서는 dependencies에서 recyclerview-v7을 추가해야합니다.

recyclerView.ItenAnimator이나 RecyclerView.ItemDecoration을 이용하여 Child View 에 대한 Animation처리나 화면에 나타나는 모양에 대한 처리를 할 수 있습니다.


ViewHolder

RecyclerView.ViewHolder는 RecyclerView내에 배치되는 View와 View에 정보를 설정하는 등의 기능을 구현하기 위한 class입니다.

Adapter의 onCreateViewHolder에서 생성되어 RecyclerView에 전달됩니다.

ViewHolder에서 관리할 View를 생성자로 전달하여 객체를 생성합니다..

setIsRecyclable메소드로 ViewHolder가 재활용되지 않도록 설정할 수 있습니다.



ViewHolder Method 


*출처 T아카데미 동영상강의(사용시 문제가 있으면 바로 삭제하겠습니다.)


Adapter

RecyclerView내에 보여주는 View에 데이터를 공급하기 위한 역활을 담당하는 Class입니다.

getItemCount로 Item의 개수를 넘겨주고, OnCreateViewHoldler에서 ViewHolder을 생성하여 넘겨주고, onBindViewHolder에서 ViewHolder의 값을 설정해줍니다.


Adapter Method 


*출처 T아카데미 동영상강의(사용시 문제가 있으면 바로 삭제하겠습니다.)



LayoutManager

RecyclerView 내에 있는 Item View의 크기 및 위치를 결정해 주는 역활을 담당하는 Class입니다.

LayoutManager에 따라 Child View가 다른 모양으로 배치됩니다. 

LinearLayoutManager, GridLayoutManager, StaggeredGridLayoutManager가 제공됩니다.

LayoutManager는 orientation을 가지고 있어, 가로와 세로 모드를 지원합니다.




*출처 T아카데미 동영상강의(사용시 문제가 있으면 바로 삭제하겠습니다.)


Source 첨부


MainActivity 소스

package com.programmer.ktko.studyrecycleview;

import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

public class MainActivity extends AppCompatActivity {
    RecyclerView containerView;
    MyAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        containerView = (RecyclerView)findViewById(R.id.view);

        //Recycler
        RecyclerView.LayoutManager manager =
                new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);

        containerView.setLayoutManager(manager);
        mAdapter = new MyAdapter();
        containerView.setAdapter(mAdapter);

        initData();

    }

    public void initData() {
        for(int i = 0; i < 20; i++) {
            ItemData item = new ItemData();
            item.icon = ContextCompat.getDrawable(this,R.mipmap.ic_launcher);
            item.title = "ktko";
            mAdapter.add(item);
        }
    }
}

Adapter 소스

package com.programmer.ktko.studyrecycleview;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by ktko on 2016. 4. 24..
 */

//RecyclerView 의 ViewHolder을 상속해야합니다. 아니면 ViewHolder Class를 만들어 상속해주셔야합니다.
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{

    List<ItemData> items = new ArrayList<ItemData>();

    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView titleView;
        ImageView icon;
        ItemData mData;

        //반드시 Super에 해당하는 함수를 호출해 주셔야합니다.
        //Item이 정의된 View를 받아서 설정을 해줍니다
        public ViewHolder(View itemView) {
            super(itemView);
            titleView = (TextView)itemView.findViewById(R.id.txt_title);
            icon = (ImageView)itemView.findViewById(R.id.img);
        }

        public void setItemData(ItemData data) {
            mData = data;
            titleView.setText(data.title);
            icon.setImageDrawable(data.icon);
        }
    }

    //데이터를 추가하는 함수를 만들고 notifyDataSetChanged를 통해 변경된 내용을 보여주게됩니다.
    public void add(ItemData item) {
        items.add(item);
        notifyDataSetChanged();
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item,parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.setItemData(items.get(position));
    }


    //아이템의 수를 전달해 줍니다.
    @Override
    public int getItemCount() {
        return items.size();
    }
}

Recycler에서 보여줄 ItemView 

package com.programmer.ktko.studyrecycleview;

import android.graphics.drawable.Drawable;

/**
 * Created by ktko on 2016. 4. 24..
 */
public class ItemData {
    String title;
    Drawable icon;
}










StudyRecycleView.zip