[android] v7 에 추가된 RecyclerView 에 대해 알아보자 #2 |
출처 : https://developer.android.com/preview/material/ui-widgets.html#recyclerview
RecyclerView
RecyclerView 는 더 향상되고, 더 유동적인 버전의 ListVIew 라 할 수 있겠다.
이 widget 은 recycle 될 수 있고, scroll 될 수 있는 view 들을 갖는다.
즉 listview 나 gridview 로 보면 되겠다.
RecyclerView 는 사용하기 편하다. 다음의 것들을 제공하기 때문이다.
- item positioning 을 위한 LayoutManager
- 일반적인 item operation 을 위한 Default animation.
custom layout manager 와 animation 을 정의하여 사용하면 flexibility 를 향상시킬 수 있다.
RecyclerView 를 사용하기 위해서는 adapter 와 layout manager 가 기본으로 필요하다.
adapter 는 RecyclerView.Adapter 를 상속한다.
layout manager 는 RecyclerView 안에서 view item 들의 position 을 결정한다. (view 적인 요소들)
현재 user 에게 보여지지 않는 view 들을 언제 reuse 할 것인지도 결정할 수 있다.
view 를 재사용 ( recycle ) 하기 위해서는 layout manager 가 adapter 에게 교체할 것을 요청할 수 있다.
view 를 이런 방식으로 recycle 하면 값비싼 findViewById lookup 을 비롯한 불필요한 view 생성에 따른 performance 이슈를 피할 수 있다.
RecyclerView 는 LInearLayoutManager 를 제공한다.
LinearLayoutManager 는 vertical 혹은 horizontal scrolling 의 형태로 layouting 하는 것을 제공한다.
다른 형태로 제공하려면 RecyclerView.LayoutManager 를 상속하여 구현하면 된다.
Animation
RecyclerView 를 통해 기본적으로 add, remove animation 은 가능하다.
이 animation 을 customize 하기 위해서는 RecyclerView.ItemAnimator 를 상속해서 사용하면 되며,
RecyclerView.setItemAnimator 함수를 이용하여 set 해주면 된다.
Examples
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
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);
// improve performance if you know that changes in content do not change the 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);
}
...
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset;
// Provide a reference to the type of views that you are using (custom viewholder)
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}
// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
// Create new views (invoked by the layout manager)
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, null);
// set the view's size, margins, paddings and layout parameters
...
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.mTextView.setText(mDataset[position]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
}
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] login test 를 쉽게 하자! (0) | 2015.12.01 |
---|---|
[android] CardView (2) | 2015.11.30 |
[android] 연락처 수정, 삭제에 대한 추가정보 (0) | 2015.11.16 |
[android] Bitmap 변환시 exif 정보 유지시키기 (0) | 2015.11.09 |
Android Loaders Tutorial (0) | 2015.11.03 |
댓글