RecyclerView 기본

Posted by ITPangPang
2016.04.02 01:45 안드로이드(android)/Recyclerview


RecyclerView 기본


- RecyclerView 기본예제로 버튼을 누르면 숫자가 1씩 증가하면서 리스트가 생성되는 것을 만들어보겠다.


1. Android Studio를 열어서 프로젝트를 하나 만든다.


2. 만들때 name만 대충 정하고 엔터 연타 눌러서 생성한다.


3. 프로젝트가 생성되면 Ctrl+Alt+Shift+S를 누른후 Project Structure를 띄운다.


4. Modules 부분 앱 클릭 중앙 위쪽 Dependencies 탭 클릭


5. 옆에 초록색 + 누른후 Library dependency선택 한 후 RecyclerView를 찾아서 추가 시킨다

   (CardView도 셋트도 많이 쓰지만 그냥 천천히 RecyclerView만 추가...)



6. 잘 추가됬는지 RecyclerView라고 한번 써본다. Import하라고 뜨는것 보니 잘 추가됬으니 이제 시작해보도록




7. 먼저 activity_main.xml을 작성해보면(버튼 + RecyclerView를 놓는다)

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<Button
android:id="@+id/btn"
android:text="Add"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

</LinearLayout>


8. 다음으로 MainActivity에서 기본적으로 필요한것을 적어준다.

public class MainActivity extends Activity
{
RecyclerView rv;
LinearLayoutManager llm;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

rv = (RecyclerView)findViewById(R.id.rv);

/* LayoutManager는 총 3가지가 있는데 ListView를 쓰기위해
LinearLayoutManager를 사용한다*/
llm = new LinearLayoutManager(this);

/* 이건 뭐 대충 찾아보니 RecyclerView의 사이즈를 고정시키는것 같다
일단 기초만 할것이니 초반에는 다 true로 놓는다*/
rv.setHasFixedSize(true);

/* 이건 뭐 RecyclerView에 붙이는 것이다 ListView로 사용한다는 의미*/
rv.setLayoutManager(llm);
}
}


9. 여기까지만 작성하면 나머지는 ListView 사용할때처럼 CustomAdapter 만들고, List만들고, Data넣고 setAdapter해주는것이랑 비슷

   뭐 다른건 CustomAdapter가 아니라 RecyclerView.Adapter를 사용한다는것쯤이다.


10. RecyclerView.Adapter를 위해 Class를 하나더 생성해준다(그냥 RecyclerView에 숫자만 올릴것이므로 CountAdapter.java)

     만들고 RecyclerView.Adapter를 extends


11. CountAdapter.java

public class CountAdapter extends RecyclerView.Adapter<CountAdapter.MyViewHolder>
{
@Override
public CountAdapter.MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
return null;
}
@Override
public void onBindViewHolder(CountAdapter.MyViewHolder myViewHolder, int i)
{

}
@Override
public int getItemCount()
{
return 0;
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
public MyViewHolder(View itemView) {
super(itemView);
}
}
}


12. 위 CountAdapter.java는 그냥 위에 한줄 적고 빨간줄에서 Alt+Enter만 연타 누르면 Implement고 생성자고 알아서 잘 만들어준다


13. 이제 다시 메인으로 돌아와서 버튼을 누를때 숫자를 증가시키고 List에 담고 Adapter에 붙이면 된다


14. MainActivity.java 완성

public class MainActivity extends Activity
{
RecyclerView rv;
LinearLayoutManager llm;
List<Integer> count = null;
Button btn;
int i=0;

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

rv = (RecyclerView)findViewById(R.id.rv);
btn = (Button)findViewById(R.id.btn);

/* LayoutManager는 총 3가지가 있는데 ListView를 쓰기위해
LinearLayoutManager를 사용한다*/
llm = new LinearLayoutManager(this);

/* 이건 뭐 대충 찾아보니 RecyclerView의 사이즈를 고정시키는것 같다
일단 기초만 할것이니 초반에는 다 true로 놓는다*/
rv.setHasFixedSize(true);

/* 이건 뭐 RecyclerView에 붙이는 것이다 ListView로 사용한다는 의미*/
rv.setLayoutManager(llm);

count = new ArrayList<>();

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
i++;
count.add(i);
rv.setAdapter(new CountAdapter(getApplication(), count, i));
}
});
}
}


15. Custom Layout을 작성하기 위해 recyclerview_custom.xml을 대충 만든다

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv"
android:textColor="#000000"
android:textSize="20sp"
android:text="11"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>


16. 마지막으로 CounterAdapter.java 완성시키기

public class CountAdapter extends RecyclerView.Adapter<CountAdapter.MyViewHolder>
{
Context mContext;
List<Integer> items;
int i = 0;

public CountAdapter(Context c, List<Integer> items, int i)
{
this.mContext = c;
this.items = items;
this.i = i;
}

@Override
public CountAdapter.MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_custom, viewGroup, false);
return new MyViewHolder(v);
}

@Override
public void onBindViewHolder(CountAdapter.MyViewHolder myViewHolder, int position)
{
final Integer item = items.get(position);
myViewHolder.tv.setText(""+item);

}

@Override
public int getItemCount()
{
return this.items.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder
{
TextView tv;
public MyViewHolder(View itemView)
{
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
}


16. 일단 간단하게 보면 i를 받아와서 onBindViewHolder에서 setText로 박아주는 코드이다

17. RecyclerView.Adapter부분은 다음글에서 로그캣으로 찍어보면서 알아보도록 하고 여기서 마무리 ~

     - MainActivity.java, Counter.java, activity_main.xml, recyclerview_custom.xml 

뭐..1씩 추가 잘되고 스크롤도 잘 된다.


저작자 표시 비영리 변경 금지
신고

'안드로이드(android) > Recyclerview' 카테고리의 다른 글

RecyclerView(Item Click) 2탄  (5) 2016.04.07
RecyclerView(Item Click) 1탄  (0) 2016.04.06
RecyclerView.Adapter, ViewHolder(추가)  (1) 2016.04.03
RecyclerView.Adapter, ViewHolder  (1) 2016.04.02
RecyclerView 기본  (2) 2016.04.02
RecyclerView  (0) 2016.04.01
이 댓글을 비밀 댓글로
    • 안드로이드 공부합시다
    • 2016.12.20 18:00 신고
    rv.setAdapter(new CountAdapter(getApplication(), count, i));
    count 값이 어댑터로 전달되지 않는거 같은데... 해결 방법이 뭘까요

    ================

    items 라는 변수가 같아서 생기는 문제였나 봅니다.
    두개의 items 를 서로 다르게 하니 해결되었어요

    public class CountAdapter extends RecyclerView.Adapter<CountAdapter.MyViewHolder>
    {
    Context mContext;
    List<Integer> items;
    int i = 0;

    public CountAdapter(Context c, List<Integer> items, int i)
    {
    this.mContext = c;
    this.items = items;
    this.i = i;
    }
    • 세실리아
    • 2017.06.10 14:26 신고
    님은 진짜 좀 알고 실력있으시네요

    다른 RecyclerView 에 대한 예제들 보면 허접스러운것밖에없거나 다 퍼와서 본인이 직접 해보진 않은게 많은데

    님은 진짜 아시는분이네요 ㄳ요