상세 컨텐츠

본문 제목

[안드로이드 코틀린] Database Room 사용법 part3 - 리스트

안드로이드

by aries574 2022. 6. 26. 12:17

본문


이번 시간에는 등록한 사용자를 RecyclerView를 이용해서 리스트로 보여주는 방법에 대하여 알아보겠습니다.

이전 포스팅은 아래 링크를 들어가시면 됩니다.

2022.06.25 - [안드로이드] - [안드로이드 코틀린] Database Room 사용법 part2 - 데이터 등록

 

[안드로이드 코틀린] Database Room 사용법 part2 - 데이터 등록

 이번 시간에는 Room을 이용해서 DB에 데이터 등록하는 방법을 알아보겠습니다. 이전 포스팅은 아래 링크를 들어가시면 됩니다. 2022.06.24 - [안드로이드] - [안드로이드 코틀린] Database Room 사용법 pa

aries574.tistory.com


목차

1. 실행 화면
2. 아이템 화면 만들기 list_item.xml
3. 아이템 어댑터 만들기 UserAdapter.kt
4. 메인 코드 수정 MainActivity.kt


1. 실행 화면


2. 아이템 화면 만들기 

 - 설명 - 

1. 이름나이를 보여주는 TextView

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    app:cardCornerRadius="10dp"
    app:cardElevation="20dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/name_text"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:textStyle="bold"/>

        <TextView
            android:id="@+id/age_text"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:textSize="20sp"
            android:textStyle="bold"/>
    </LinearLayout>

</androidx.cardview.widget.CardView>

 


3. 아이템 어댑터 만들기 

 - 설명 - 

 1. 데이터와 아이템 화면을 연결해주는 클래스

UserAdapter.kt

class UserAdapter: RecyclerView.Adapter<UserAdapter.MyViewHolder>() {

    private lateinit var userList: List<User>
    
    class MyViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){

        val nameText: TextView = itemView.findViewById(R.id.name_text)
        val ageText: TextView = itemView.findViewById(R.id.age_text)
    }

    //화면 설정
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view: View = LayoutInflater.from(parent.context)
            .inflate(R.layout.list_item, parent, false)

        return MyViewHolder(view)
    }

    //데이터 설정
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.nameText.text = userList[holder.adapterPosition].userName
        holder.ageText.text = userList[holder.adapterPosition].userAge
    }

    //아이템 갯수
    override fun getItemCount(): Int {
        return userList.size
    }

    //아이템 등록
    fun setUserList(userList: List<User>){
        this.userList = userList
    }
}

 

 

4. 메인 코드 수정 

 - 설명 - 

1. adapter = UserAdapter()

 Adapter 초기화

2. recyclerView.adapter = adapter

RecyclerView Adapter 적용

3. adapter.setUserList(userList)

Adapter에 데이터 적용

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private lateinit var adapter: UserAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val insertBtn: FloatingActionButton = findViewById(R.id.insert_btn)
        insertBtn.setOnClickListener {
            val intent: Intent = Intent(this, InsertActivity::class.java)

            activityResult.launch(intent)
        }

        //RecyclerView 설정
        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)

        //UserAdapetr 초기화
        adapter = UserAdapter()

        //Adapter 적용
        recyclerView.adapter = adapter

        //사용자 조회
        loadUserList()
    }

    private val activityResult: ActivityResultLauncher<Intent> = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()){
        if(it.resultCode == RESULT_OK){
            //돌아온 값이 OK라면

            //사용자 조회
            loadUserList()
        }
    }

    //사용자 조회
    private fun loadUserList(){

        val db: AppDatabase? = AppDatabase.getDatabase(applicationContext)

        val userList: List<User> = db?.userDao()!!.getAllUser()

        if(userList.isNotEmpty()){

            //데이터 적용
            adapter.setUserList(userList)
        }
    }
}

2022.06.20 - [안드로이드] - [안드로이드 코틀린] 밀어서 화면 변경 ViewPager2 갤러리 느낌으로 만드는 방법

 

[안드로이드 코틀린] 밀어서 화면 변경 ViewPager2 갤러리 느낌으로 만드는 방법

이번 시간에는 뷰페이저2(ViewPager2)를 이용해서 이미지를 가로, 세로 방향으로 밀어서 갤러리 느낌으로 보여주는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. dataBinding 설

aries574.tistory.com

2022.06.17 - [안드로이드] - [안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정

 

[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정

사용자가 정한 시간에 알람이 울리게 하는 방법에 대하여 알아보겠습니다. 이번 시간에는 알람 관련 클래스와 설정들을 만들어 보겠습니다. 목차 1. 알람 클래스 만들기 NotificationHelper.kt 2. 

aries574.tistory.com

2022.06.14 - [안드로이드] - [안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정

 

[안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정

앞으로 TabLayout을 직접 만들어 애니메이션 기능까지 넣어보도록 하겠습니다. 이번 시간에는 화면 구성 및 설정을 만들어 보겠습니다. 목차 1. 실행 화면 2. dataBinding 설정 build.gradle 3. 테마 변경 t

aries574.tistory.com

반응형

관련글 더보기

댓글 영역