항상 ListView 로만 코딩을 해오다가,


ListView보다 성능과 퍼포먼스가 더 좋다고 하는 RecyclerView, CardView를 사용해보려 한다.


android developer의 training에 올라온 게시글로 사용법을 익혀보자.



The RecyclerView widget is a more advanced and flexible version of ListView

This widget is a container for displaying large data sets that can be scrolled very efficiently by maintaining a limited number of views. 

Use the RecyclerViewwidget when you have data collections whose elements change at runtime based on user action or network events.



어렵지 않은 내용이다. 요약하자면 Listview 보다 성능적으로 좋고, RecyclerView는 최소한의 View 만으로도 큰 데이터를 효율적으로 스크롤링 해준다


또한, 사용자의 입장에서 시시각각 데이터가 변화할때(사용자의 액션을 처리하거나, 네트워크 처리등) 사용하기를 권장한다고 적혀있다.



The RecyclerView class simplifies the display and handling of large data sets by providing:

  • Layout managers for positioning items
  • Default animations for common item operations, such as removal or addition of items

You also have the flexibility to define custom layout managers and animations for RecyclerView widgets.



요약하자면, RecyclerView는 기본적으로 LayoutManager를 사용하여 item을 관리하고, 


사용자입장에서 item의 변화(삭제 되거나 추가등)를 느낄 수 있도록, 기본 애니메이션이 있다고 한다. 


또한, LayoutManager를 사용하여 효과적으로 item의 정렬 과 애니메이션등을 다룰 수 있다고 한다.


중요한것은,  Adapter를 통해 data를 RecyclerView에 연결시킨다. 

(RecyclerView는 데이터를 사용자에게 어떻게 보여줄지 그림담당만 한다.)


RecyclerView에 대한 설명은 이정도로 충분하다. (더 자세한 설명을 알고 싶다면, http://developer.android.com/training/material/lists-cards.html 을 참고)


이번엔 CardView에 대해 간단히 설명 하자면, 


Card모양의 View이다. 즉, 예전에는 custom 하여 card모양을 흉내냈지만, CardView가 나옴으로써 좀더 쉽게 card를 표현 할 수 있다.


(material 디자인에 맞게, 그림자와 클릭 효과등을 지정 할 수 있다.) 이러한 view를 RecyclerView와 함께 사용할 것이다. 


좀더 세부적으로 설명하자면, 


ListView 에는 각각 item들이 차지하는 view 의 공간이 있다. 이 공간을 사용자 입맛에 맞게 커스텀하여 데이터를 표현하는 것이다.


RecyclerView에서는 위와 같은 공간을 CardView로 붙일 것이다.



 

이제 직접 코딩을 해보자. 생각보다 간단하다.


먼저, 해당 위젯을 쓰기 위해서는 라이브러리가 필요하다. (안드로이드 스튜디오 기준.)



dependencies {
   
...
    compile
'com.android.support:cardview-v7:21.0.+'
    compile
'com.android.support:recyclerview-v7:21.0.+'
}



해당 프로젝트 graddle에 추가한다. 그 다음으로, layout 폴더에  my_activity를 만들고 아래와 같이 작성한다.


<!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView
   
android:id="@+id/my_recycler_view"
   
android:scrollbars="vertical"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"/>



위에서 설명했듯이, RecyclerView에는 LayoutManager가 필요하다. 아래의 코딩을 보자.(MyActivity.java)


public class MyActivity extends Activity {
   
private RecyclerView mRecyclerView;
   
private RecyclerView.Adapter mAdapter;
   
private RecyclerView.LayoutManager mLayoutManager;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView
(R.layout.my_activity);
        mRecyclerView
= (RecyclerView) findViewById(R.id.my_recycler_view);

       
// use this setting to improve performance if you know that changes
       
// in content do not change the layout size of the RecyclerView
        mRecyclerView
.setHasFixedSize(true);

       
// use a linear layout manager
        mLayoutManager
= new LinearLayoutManager(this);
        mRecyclerView
.setLayoutManager(mLayoutManager);

       
// specify an adapter (see also next example)
        mAdapter
= new MyAdapter(myDataset);
        mRecyclerView
.setAdapter(mAdapter);
   
}
   
...
}



어렵지 않다. 위에서 설명한데로 RecyclerView의 객체인 mRecyclerView를 선언한후,


item정렬을 위한 LayoutManager를 LinearLayoutManager로 사용한다.(Linear 이므로 아이템이 수직,수평으로 배치 될 것이다.)


데이터와 RecyclerView를 연결 시키기 위한 adpaer로 MyAdapter를 선언하였다. 


이러한 LayoutManager와 Adapter를 setLayoutManager 와 setAdapter 메서드로 셋팅한다.


여기까지 했다면, MyAdapter에 빨간줄이 들어올 것이다.(아직 선언 하지 않았으니까....)


다음 포스팅때 마저 하도록 하겠다.






포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts