728x90
1. RecyclerView Adapter 필요한 파일 추가
- 새로운 클래스를 생성 할 자바 파일 추가
- RecyclerView Adapter와 연결될 레이아웃 파일 추가
- 경로 : res - layout
- new - Layout Resource File
- Layout Resource File 추가
- File name : 원하는 이름으로 설정
- Root element : LinearLayout
2. 레이아웃 UI 설계
- 간단한 테스트를 위한 텍스트뷰
- 리니어 레이아웃은 layout_height가 wrap_content여야 여러개의 데이터를 출력 할 수 있음
ContactAdapter.java
코드 안에 주석처리로 설명
package com.hyunsungkr.contactapp.adapter;
// 1. RecyclerView.Adapter 를 상속받는다.
// 2. 상속받은 클래스가 abstract이므로, unimpLemented method 오버라이드!
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.hyunsungkr.contactapp.R;
import com.hyunsungkr.contactapp.model.Contact;
import java.util.List;
// 6. RecyclerView.Adapter의 데이터 타입을 적어줘야한다.
// 우리가 만든 ViewHolder로 적는다.
// 7. 에러가 뜨면 우리가 만든 ViewHolder로 onCreateViewHolder,
// onBindViewHolder 함수도 변경해준다.
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ViewHolder> {
// 5. 어댑터 클래스의 멤버 변수와 생성자를 만들어준다.
Context context;
List<Contact> contactList;
public ContactAdapter(Context context, List<Contact> contactList) {
this.context = context;
this.contactList = contactList;
}
// 8. 오버라이드 함수 3개를 전부 구현해주면 끝!
@NonNull
@Override
public ContactAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// xml 파일을 연결하는 작업
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_row,parent,false);
return new ContactAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ContactAdapter.ViewHolder holder, int position) {
// 뷰에 데이터를 셋팅한다.
Contact contact = contactList.get(position);
holder.txtName.setText(contact.name);
holder.txtPhone.setText(contact.phone);
}
@Override
public int getItemCount() {
// 전체 데이터의 갯수를 적어준다.
return contactList.size();
}
// 3. ViewHolder 클래스를 만든다.
// 이 클래스는 row.XML 화면에 있는 뷰를 연결시키는 클래스다.
// RecyclerView.ViewHolder 상속받는다.
// 4. 생성자를 만든다.
// 생성자에서 뷰를 연결시키는 코드를 작성하고 클릭 이벤트도 작성한다.
public class ViewHolder extends RecyclerView.ViewHolder{
TextView txtName;
TextView txtPhone;
ImageView imgDelete;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txtName = itemView.findViewById(R.id.txtName);
txtPhone = itemView.findViewById(R.id.txtPhone);
imgDelete = itemView.findViewById(R.id.imgDelete);
}
}
}
MainActivity
코드 안에 주석처리로 설명
package com.hyunsungkr.contactapp;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.hyunsungkr.contactapp.adapter.ContactAdapter;
import com.hyunsungkr.contactapp.data.DatabaseHandler;
import com.hyunsungkr.contactapp.model.Contact;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
Button btnAdd;
// RecyclerView를 사용할 때
// RecyclerView,Adapter,ArrayList를 쌍으로 적어라.
RecyclerView recyclerView;
ContactAdapter adapter;
ArrayList<Contact> contactList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAdd = findViewById(R.id.btnAdd);
// RecyclerView를 화면에 연결하고
// 쌍으로 같이 다니는 코드도 작성.
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,AddActivity.class);
startActivity(intent);
}
});
// DB로 부터 데이터를 가져와서 RecyclerView에 표시하자.
DatabaseHandler db = new DatabaseHandler(MainActivity.this);
contactList=db.getAllContacts();
db.close();
// 어댑터를 만든다.
adapter = new ContactAdapter(MainActivity.this,contactList);
// 어댑터를 리사이클러뷰에 셋팅한다.
recyclerView.setAdapter(adapter);
}
}
실행 결과
이전 포스팅에서의 작성한 DB와 리스트를 화면에 출력하는 코드를 이용해서 위 사진과같은 액티비티 개발 완료