본문 바로가기
Language/Android

[Android] 안드로이드_리사이클러뷰(RecyclerView_v7) - 기본적인 리사이클러뷰 구현하기

by 썸머워즈 2019. 12. 12.
반응형


RecyclerView 구현하기


이번에 리스트뷰와 같은 형식으로 구현을 해야하는 상황이 왔는데


안드로이드관련한 지식이 거의 없다시피 하기 때문에


요즘은 RecyclerView를 사용한다하여


리스트뷰를 처음부터 접하기보단 리사이클러뷰부터 접해보기로 하여 찾아보며 구현해보았다.


하나하나에 관한 자세한 의미는 모르겠지만 


나중을 위해 기록해두고자 한다.


리사이클러뷰의 가장 큰 특징은 유연함 이라고들 한다.


자세한건 나중에 개인적으로 공부하도록하고 


쉽게 당장 사용할수있는 정도로만 정리해두고자 한다.


우선  리사이클러뷰를 사용하기 위해선 라이브러리를 등록해야한다.


여기서 특이한건 대부분의 블로그에서 


꼭 v7버전의 리사이클러뷰를 사용해야만 한다하는데


androidx 버전의 리사이클러뷰도 있다.


정확히 무슨 차이가 있는지는 모르겠지만 버전에 맞게 사용하면 될거같다.


dependencies {
...
implementation 'com.android.support:recyclerview-v7:26.1.0'
}


이제 필요한 곳에 RecyclerView를 추가해준다.


보통 Activity쪽에 추가해 주면 된다.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="320dp"
android:layout_height="320dp">

<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0F0F0"
/>
</LinearLayout>


리사이클러뷰 아이템 뷰 레이아웃을 추가해 주어야 한다.


각자 원하는 item 형식으로 만들면 되는 부분이다.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:gravity="center_vertical"
android:layout_marginBottom="8dp"
android:background="@android:color/white">

<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center_vertical">

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="TITLE"
android:textSize="15sp"
android:textColor="@android:color/black"
android:textStyle="bold"/>

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="content"
android:textSize="13sp"
android:textColor="@android:color/darker_gray"/>
</LinearLayout>

<ImageView
android:id="@+id/imageView"
android:layout_width="50dp"
android:layout_height="50dp"
app:srcCompat="@mipmap/ic_launcher"/>
</LinearLayout>


이제 가장 중요한 리사이클러뷰 어댑터를 만들어야한다.


어탭터에서 아이템뷰에 값을넣고 데이터들을 담아 뿌려주는 아주 중요한 역할을한다.


아래에 ListData를 set하고 get하는건 그냥 내가 필요해서 사용하는 부분이라 중요하진않다.


public class SyncListAdapter extends RecyclerView.Adapter<SyncListAdapter.ItemViewHolder> {

// adapter에 들어갈 list
private ArrayList<NotiData> listData = new ArrayList<>();

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

@Override
public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
holder.onBind(listData.get(position));
}

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

public void addItem(NotiData data) {
listData.add(data);
}

// subView를 setting 해줍니다.
class ItemViewHolder extends RecyclerView.ViewHolder {

private TextView textView1;
private TextView textView2;
private ImageView imageView;

ItemViewHolder(View itemView) {
super(itemView);

textView1 = itemView.findViewById(R.id.textView1);
textView2 = itemView.findViewById(R.id.textView2);
imageView = itemView.findViewById(R.id.imageView);
}

void onBind(NotiData data) {
textView1.setText(data.getTitle());
textView2.setText(data.getContent());
imageView.setImageResource(data.getResId());
}
}

public ArrayList<NotiData> getListData() {
return listData;
}

public void setListData(ArrayList<NotiData> listData) {
this.listData = listData;
}

}


이제 실제로 해당 리사이클러뷰를 레이아웃매니저를 통해 지정을 해줘야한다.


이 마무리 작업을 안해주면 실행이 안된다.

(어댑터에서 사용할 데이터도 넣어주어야한다.)


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.noti_sync_list);

init();

}

public void init(){

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

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);

SyncListAdapter adapter = new SyncListAdapter();

recyclerView.setAdapter(adapter);

}

이런식으로 구성만 해놓으면 바로 사용이 가능하며 추가적으로 수평으로 리사이클러뷰 아이템을 배치하고싶으면



recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)) ;


이런식으로 사용하면 된단다. 


그리고 리사이클러뷰는 카드뷰(Card View) 와 같이 잘 사용되기 때문에 카드뷰도 배워두면 좋을거같다.


정리 잘 되어있는 블로그 : https://recipes4dev.tistory.com/154

(출처는 아니지만 참고하기 좋은 블로그다.)



반응형


댓글

TOP