상세 컨텐츠

본문 제목

RecyclerView(전화번호부 만들기)

Android(강의정리)

by 낙지지 2020. 11. 19. 16:44

본문

- 사용할 PhoneBook과 Person class

더보기
// 전화번호부
class PhoneBook() {
    val personList = ArrayList<Person>();

    fun addPerson(person: Person) {
        personList.add(person)
    }
}

class Person(val name: String, val number: String) {

}

 

- 전화번호부 더미 생성 준비(재활용)

fun createFakePhoneBook(fakeNumber: Int = 10, phoneBook: PhoneBook = PhoneBook()): PhoneBook {
        for (i in 0 until fakeNumber) {
            phoneBook.addPerson(
                Person(
                    name = "" + i + "번째 사람",
                    number = "" + i + "번째 사람의 전화번호"
                )
            )
        }
        return phoneBook
    }

 

 

- 어텝더를 달기 위해 adapter 클래스 구현

- 기존에 Addview와 약간 다른 것은, activity도 인자로 받는다는 점.(해당 엑티비티를 통해 startActivity구현)

class PhoneBookRecyclerAdapter(
    val phonebookList: PhoneBook,
    val inflater: LayoutInflater,
    val activity: Activity

) : RecyclerView.Adapter<PhoneBookRecyclerAdapter.ViewHolder>() {

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val personName: TextView

        init {
            personName = itemView.findViewById(R.id.person_name)
            itemView.setOnClickListener {
                val intent = Intent(activity, PhoneBookDetailActivity::class.java)
                intent.putExtra("name", phonebookList.personList.get(adapterPosition).name)
                intent.putExtra("number", phonebookList.personList.get(adapterPosition).number)
                //startActivity가 바로 안된다.(상속관계생각)
                activity.startActivity(intent)
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = inflater.inflate(R.layout.phonebook_item, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.personName.setText(phonebookList.personList.get(position).name)
    }

    override fun getItemCount(): Int {
        return phonebookList.personList.size
    }
}

 

-onCreate

// 데이터 생성
        val phonebook = createFakePhoneBook(30)
        // 어뎁터 연결
        val phoneBookRecyclerAdapter = PhoneBookRecyclerAdapter(
            phonebookList = phonebook,
            inflater = LayoutInflater.from(this@PhoneBookWithRecyclerViewActivity),
            activity = this
        )
        phonebook_recycler_view.adapter = phoneBookRecyclerAdapter
        phonebook_recycler_view.layoutManager = LinearLayoutManager(this@PhoneBookWithRecyclerViewActivity)

변수를 선언하지 않고 축약해서 사용가능, 다만 너무 축약하면 다른 사람들이 보기에 코드가 난해할 수 있음

//위를 아래와 같이 축약 가능, 장단점있음
        with(phonebook_recycler_view){
            this.adapter = PhoneBookRecyclerAdapter(
                phonebookList = createFakePhoneBook(30),
                inflater = LayoutInflater.from(this@PhoneBookWithRecyclerViewActivity),
                activity = this@PhoneBookWithRecyclerViewActivity
            )
            this.layoutManager = LinearLayoutManager(this@PhoneBookWithRecyclerViewActivity)
        }

 

'Android(강의정리)' 카테고리의 다른 글

Tablayout, pager(2)  (0) 2020.11.19
TabLayout, Pager  (0) 2020.11.19
RecyclerView  (0) 2020.11.19
ListView  (0) 2020.11.19
addView(전화번호부 만들기)  (0) 2020.11.19

관련글 더보기

댓글 영역