이번 시간에는 리스트로보인 사용자를 선택하면 수정 화면(UpdateActivity)으로 이동하고,
정보를 변경하고 저장하면 DB내용이 업데이트, 메인화면(MainActivity)으로 이동하는 방법에
대하여 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.06.26 - [안드로이드] - [안드로이드 코틀린] Database Room 사용법 part3 - 리스트
[안드로이드 코틀린] Database Room 사용법 part3 - 리스트
이번 시간에는 등록한 사용자를 RecyclerView를 이용해서 리스트로 보여주는 방법에 대하여 알아보겠습니다. 이전 포스팅은 아래 링크를 들어가시면 됩니다. 2022.06.25 - [안드로이드] - [안드로이드
aries574.tistory.com
- 설명 -
액티비티 중복 생성 방지
MainActivity에 추가
android:launchMode="singleTask"
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask">
app 선택 -> 마우스 오른쪽 클릭 -> New -> Activity -> Empty Activity
액티비티 이름: UpdateActivity
- 설명 -
1. 리스트에서 선택한 데이터 보여주는 EditText
2. 수정한 사용자 정보를 저장하는 Button
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".UpdateActivity">
<EditText
android:id="@+id/up_name_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="이름"
android:inputType="text"/>
<EditText
android:id="@+id/up_age_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/up_name_edit"
android:hint="나이"
android:inputType="number"/>
<Button
android:id="@+id/update_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/up_age_edit"
android:layout_centerHorizontal="true"
android:text="수정"/>
</RelativeLayout>
- 설명 -
1. var name: String? = intent.getStringExtra("uName")
ItemAdapter에서 넘어온 데이터 변수에 담기
2. upNameEdit.setText(name)
사용자 정보 화면에 보여주기
3. upNameEdit.text.toString()
입력 값 변수에 담기
4. var user: User = User(uId, iName, iAge)
수정할 데이터 생성자에 담기
5. db?.userDao()?.updateUser(user)
수정 DB 호출
class UpdateActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_update)
//초기화
var upNameEdit: EditText = findViewById(R.id.up_name_edit)
var upAgeEdit: EditText = findViewById(R.id.up_age_edit)
var updateBtn: Button = findViewById(R.id.update_btn)
//UserAdapter에서 넘어온 데이터 변수에 담기
var uId: Int = intent.getIntExtra("uId", 0)
var uName: String? = intent.getStringExtra("uName")
var uAge: String? = intent.getStringExtra("uAge")
//화면에 값 적용
upNameEdit.setText(uName)
upAgeEdit.setText(uAge)
//수정버튼 이벤트
updateBtn.setOnClickListener {
//입력값 변수에 담기
var iName = upNameEdit.text.toString()
var iAge = upAgeEdit.text.toString()
//사용자 클래스 생성
var user: User = User(uId, iName, iAge)
//DB생성
var db: AppDatabase? = AppDatabase.getDatabase(applicationContext)
//데이터 수정
db?.userDao()?.updateUser(user)
//메인화면으로 이동
var intent: Intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
//액티비티 종료
finish()
}
}
}
- 설명 -
1. private val context: Context
파라미터 추가, 액티비티 호출 시에 필요함
2. Intent(context, UpdateActivity::class.java)
Intent 생성
3. intent.putExtra("uName", name)
Intent에 데이터 담기(키값, 데이터)
4. context.startActivity(intent)
액티비티 이동
class UserAdapter(private val context: Context):
RecyclerView.Adapter<UserAdapter.MyViewHolder>() {
//초기화
private var userList: List<User> = ArrayList<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) {
//데이터 변수에 담기
var uId = userList[holder.adapterPosition].id
var uName = userList[holder.adapterPosition].userName
var uAge = userList[holder.adapterPosition].userAge
//데이터 적용
holder.nameText.text = uName
holder.ageText.text = uAge
//수정화면으로 이동
holder.itemView.setOnClickListener {
var intent: Intent = Intent(context, UpdateActivity::class.java)
//값 담기
intent.putExtra("uId", uId)
intent.putExtra("uName", uName)
intent.putExtra("uAge", uAge)
context.startActivity(intent)
}
}
override fun getItemCount(): Int {
return userList.size
}
fun setUserList(userList: List<User>){
this.userList = userList
//데이터 재설정
notifyDataSetChanged()
}
}
- 설명 -
1. adapter = UserAdapter(this)
UserAdapter 생성자에 Context 추가했기 때문에
MainActivity에서 전달할 인자 추가
2. override fun onNewIntent(intent: Intent?)
수정 화면에서 메인화면 호출 시 실행
액티비티 중복 생성 방지하는 코드를
추가했기 때문에 OnCreate대신 실행된다.
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(this)
//Adapter 적용
recyclerView.adapter = adapter
//사용자 조회
loadUserList()
}
//액티비티가 백그라운드에 있는데 호출되면 실행
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
//사용자 조회
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.17 - [안드로이드] - [안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정
[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정
사용자가 정한 시간에 알람이 울리게 하는 방법에 대하여 알아보겠습니다. 이번 시간에는 알람 관련 클래스와 설정들을 만들어 보겠습니다. 목차 1. 알람 클래스 만들기 NotificationHelper.kt 2.
aries574.tistory.com
2022.06.06 - [안드로이드] - [안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성
이번 시간부터 코틀린 버전 커스텀 달력을 만들어보겠습니다. 이번 포스팅은 화면 구성입니다. 목차 1. 실행 화면 2. dataBinding 설정 3. 메인 화면 구성 activity_main.xml 1. 실행 화면 2. dataB..
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
[안드로이드 코틀린] 큐알코드(QR CODE) 스캔하는 방법 (0) | 2022.06.29 |
---|---|
[안드로이드 코틀린] Database Room 사용법 part5 - 삭제 (0) | 2022.06.28 |
[안드로이드 코틀린] Database Room 사용법 part3 - 리스트 (0) | 2022.06.26 |
[안드로이드 코틀린] Database Room 사용법 part2 - 데이터 등록 (0) | 2022.06.25 |
[안드로이드 코틀린] Database Room 사용법 part1 - Room 설정 (0) | 2022.06.24 |
댓글 영역