티스토리 뷰
반응형
전화번호부 어플을 만드는 연습을 해보겠습니다.
전화번호부 목록이 나오고, 해당 목록의 아이템을 들어가면, 아이템에 이름과 전화번호가 나오도록 하는 기능입니다.
1. 먼저, Phonebook 액티비티 하나를 만들어줍니다.
2. 해당 액티비티에 Phonebook( ), Person( ) 클래스를 만듭니다.
3. Phonebook( ) 클래스 안에 addPerson 함수를 만듭니다.
4. personList에 Person( ) 클래스의 인자들이 들어갈 수 있도록 선언해둡니다.
5. phoneBook.personList의 아이템을 하나씩 담을 레이아웃 리소스 파일을 만듭니다.
6. Phonebook 액티비티의 XML로 가서 컨테이너를 만듭니다.
7. 넘어갈 상세페이지 액티비티를 만듭니다.
1. activity_phonebook.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".PhonebookActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40dp"
android:gravity="center"
android:padding="4dp"
android:text="김형용 전화번호부" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:gravity="center"
android:padding="4dp"
android:text="Hyungyong Kim's PhoneBook" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/phonebook_list_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
</ScrollView>
</LinearLayout>
반응형
2. PhonebookActivity.kt
package com.example.myapplication
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
class PhonebookActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_phonebook)
val phoneBook = createFakeNumber(30)
createPhonebookList(phoneBook)
}
fun createFakeNumber(fakeNumber: Int = 10, phoneBook: PhoneBook = PhoneBook()): PhoneBook{
for (i in 0 until fakeNumber){
phoneBook.addPerson(
Person(
name = "" + i + "th Person",
number = "" + i + "th Person's Number"
)
)
}
return phoneBook
}
fun createPhonebookList(phoneBook: PhoneBook){
val layoutInflater = LayoutInflater.from(this@PhonebookActivity)
val container = findViewById<LinearLayout>(R.id.phonebook_list_container)
for (i in 0 until phoneBook.personList.size){
val view = layoutInflater.inflate(R.layout.phonebook_item, null)
val personNameView = view.findViewById<TextView>(R.id.person_name)
personNameView.setText(phoneBook.personList.get(i).name)
addSetOnClickListener(phoneBook.personList.get(i), view)
container.addView(view)
}
}
fun addSetOnClickListener(person: Person, view: View){
view.setOnClickListener {
val intent = Intent(this@PhonebookActivity, PhonebookDetailActivity::class.java)
intent.putExtra("name", person.name)
intent.putExtra("number", person.number)
startActivity(intent)
}
}
}
class PhoneBook(){
val personList = ArrayList<Person>()
fun addPerson(person: Person){
personList.add(person)
}
}
class Person(val name: String, var number: String){
}
3. activity_phonebook_detail.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#673AB7"
tools:context=".PhonebookDetailActivity">
<TextView
android:id="@+id/back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go Back"
android:textStyle="bold"
android:textColor="#ffffff"
android:background="#0C0A0A"
android:textSize="20dp"
android:layout_marginBottom="16dp"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginBottom="16dp"
android:src="@drawable/solid"/>
<TextView
android:id="@+id/person_detail_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sample Name"
android:textColor="#ffffff"
android:textSize="50dp"
android:gravity="center"
android:layout_marginBottom="16dp"/>
<TextView
android:id="@+id/person_detail_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="000-0000-0000"
android:textColor="#ffffff"
android:textSize="50dp"
android:gravity="center"
android:layout_marginBottom="16dp"/>
</LinearLayout>
4. PhonebookDetailActivity.kt
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_phonebook_detail.*
class PhonebookDetailActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_phonebook_detail)
getPersonInfoAndDraw()
//뒤로가기 버튼
back.setOnClickListener {
onBackPressed()
}
}
//인텐트 받는쪽
fun getPersonInfoAndDraw(){
val name = intent.getStringExtra("name")
val number = intent.getStringExtra("number")
//정보 받은 후 뷰 그려주기
person_detail_name.setText(name)
person_detail_number.setText(number)
}
}
5. phonebook_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#121111"
android:gravity="center_vertical"
android:padding="6dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginRight="16dp"
android:src="@drawable/stroke"/>
<TextView
android:id="@+id/person_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="20dp"
android:text="사용자"
android:textStyle="bold"
android:gravity="center"
android:textColor="#ffffff"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ffffff"/>
</LinearLayout>
반응형
'Android Projects' 카테고리의 다른 글
[난수 생성기] UI & 로직 구현 (0) | 2021.08.03 |
---|---|
[BMI Calculator] 최종 완성 (0) | 2021.07.25 |
[BMI Calculator] 뷰와 코틀린 코드 연결하기 (0) | 2021.07.20 |
[BMI Calculator] 레이아웃 만들기 (0) | 2021.07.20 |
[BMI Calculator] 프로젝트 생성하기 (0) | 2021.07.20 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 2021년 사건사고
- 메소드 오버라이딩
- 리사이클러뷰
- RecyclerView
- 안드로이드 앱 만들기
- 탭레이아웃
- android adapter
- 안드로이드 어댑터
- 2019년 사건사고
- 안드로이드 스튜디오 에러
- 뷰 바인딩
- Bmi Calculator
- 안드로이드 프로젝트
- addView
- bmi 계산기 만들기
- 애드뷰
- 상대적 레이아웃
- 자바스크립트 배열
- 인텐트
- findViewById
- ToDo List 앱 만들기
- view binding
- 리스트뷰
- tabLayout
- notifyDataSetChanged
- 대한민국 미제사건
- 미제사건
- lazy init
- 2007년 사건사고
- 선형 레이아웃
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함