1. build.gradle
dependencies{
! implementation 'androidx.recyclerview:recyclerview:1.1.0'
! implementation 'com.github.bumptech.glide:glide:4.11.0'
! implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
! implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
! annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
...
}
Dto list > parcel > item_view ( parcel 묶어서 데이터를 한번에 옮겨줌 id, name, 등등 한사람의 데이터를 묶어서 한번에 넘겨줌)
2. DataVo(data)
class DataVo(val name:String?, val id:String?, val address:String?, val pay:Int, val photo:String?) : Parcelable {
constructor(parcel:Parcel) :this(
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readInt(),
parcel.readString()
){}
// Parcel: 들어오는 부분
override fun writeToParcel(parcel: Parcel, p1: Int) {
parcel.writeString(name)
parcel.writeString(id)
parcel.writeString(address)
parcel.writeInt(pay)
parcel.writeString(photo)
}
override fun describeContents(): Int {
return 0
}
// singleton
companion object CREATOR : Parcelable.Creator<DataVo>{
override fun createFromParcel(parcel: Parcel): DataVo {
return DataVo(parcel)
}
override fun newArray(size: Int): Array<DataVo?> {
return arrayOfNulls(size)
}
}
}
3. CustomAdapter( ==> view_item_layout 을 만들어 준것)
// 변수 입력
class CustomAdapter(private val context:Context, private val dataList: ArrayList<DataVo>) : RecyclerView.Adapter<ItemViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.view_item_layout, parent, false)
return ItemViewHolder(view)
}
// bind를 통해 list에 순서대로 데이터를 넣어줌
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
holder.bind(dataList[position], context)
}
// 여러개의 item을 만들어 주기 위해
override fun getItemCount(): Int {
return dataList.size
}
}
// class를 하나의 Dto라고 봐도 됨
// name, photo, address, pay를 묶은 하나의 item(일종의 Dto)
class ItemViewHolder(itemView:View) : RecyclerView.ViewHolder(itemView){
private val userPhoto = itemView.findViewById<ImageView>(R.id.img_profile)
private val userName = itemView.findViewById<TextView>(R.id.userNameTxt)
private val userPay = itemView.findViewById<TextView>(R.id.payTxt)
private val userAddress = itemView.findViewById<TextView>(R.id.addressTxt)
// data -> resource (binding)
fun bind(dataVo: DataVo, context: Context){
// 사진
// 사진 데이터가 비어있지 않을경우
if(dataVo.photo != ""){
// resourceId는 숫자로 표시, drawable: 이미지 파일이 있는 폴더
val resourceId = context.resources.getIdentifier(dataVo.photo, "drawable", context.packageName)
// 데이터가 제대로 넘어와서 0보다 클 경우
if(resourceId > 0){
// resourceId를 userPhoto에 대입
userPhoto.setImageResource(resourceId)
}else{
// 0보다 크지 않을경우(외부 이미지 등) > 다시 로딩해서 item을 가져옴
Glide.with(itemView).load(dataVo.photo).into(userPhoto)
}
// 사진 데이터가 없을 경우
} else{
userPhoto.setImageResource(R.mipmap.ic_launcher_round) // 이미지 없다. 아무 이미지나 뿌린다
}
// TextView 데이터를 세팅
userName.text = dataVo.name
userPay.text = dataVo.pay.toString()
userAddress.text = dataVo.address
// itemView 를 클릭시
itemView.setOnClickListener{
println(dataVo.name + " " + dataVo.photo)
// ProfileDetailActivity 로 이동
Intent(context, ProfileDetailActivity::class.java).apply {
// 짐싸!
putExtra("data", dataVo)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}.run { context.startActivity(this) }
}
}
}
4. MainActivity
class MainActivity : AppCompatActivity() {
var userList = arrayListOf<DataVo>(
DataVo("김철수", "kcs", "서울시", 3000000, "kim"),
DataVo("박상현", "psh", "부산시", 5000000, "park"),
DataVo("최진형", "cjh", "광주시", 4000000, "choi"),
DataVo("정수동", "jsd", "충주시", 4500000, "jung")
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
// recyclerView에 adapter(view_item_layout)넣기
val mAdapter = CustomAdapter(this, userList)
recyclerView.adapter = mAdapter
// recylerView에 layout 수직으로 넣기
val layout = LinearLayoutManager(this)
recyclerView.layoutManager = layout
recyclerView.setHasFixedSize(true)
}
}
'안드로이드' 카테고리의 다른 글
[Android] Button (0) | 2022.03.23 |
---|---|
[Android] Intent (0) | 2022.03.22 |
[Android] Fragment (0) | 2022.03.22 |
[Android] 2 (0) | 2022.02.20 |
[Android] 1 (0) | 2022.02.17 |
댓글