이번 시간에는 리스트에 있는 사용자를
왼쪽으로 스와이프(Swipe) 해서 삭제를
하는 방법에 대하여 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
build.gradle(Module:프로젝트명:app)
dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.
implementation 'it.xabaras.android:recyclerview-swipedecorator:1.4'
setting.gradle
repositories 괄호 안에 아래 코드를 넣어주시면 됩니다.
maven { url 'https://jitpack.io' }
- 설명 -
1. userList 타입 List -> ArrayList 변경
2. 사용자 삭제하는 deleteUser 함수 추가
class UserAdapter(private val context: Context): RecyclerView.Adapter<UserAdapter.MyViewHolder>() {
private var userList: ArrayList<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.bindingAdapterPosition].id
var name = userList[holder.bindingAdapterPosition].userName
var age = userList[holder.bindingAdapterPosition].userAge
//화면에 데이터 적용
holder.nameText.text = name
holder.ageText.text = age
//수정 화면으로 이동
holder.itemView.setOnClickListener {
var intent: Intent = Intent(context, UpdateActivity::class.java)
intent.putExtra("uId", uId)
intent.putExtra("uName", name)
intent.putExtra("uAge", age)
context.startActivity(intent)
}
}
//아이템 갯수
override fun getItemCount(): Int {
return userList.size
}
//사용자 등록
fun setUserList(userList: ArrayList<User>){
this.userList = userList
notifyDataSetChanged()
}
//사용자 삭제
fun deleteUser(position: Int){
this.userList.removeAt(position)
}
}
- 설명 -
1. userList 전역 변수로 변경
2. userList 타입 ArrayList 변경
3. onSwiped 제스처 기능 구현
4. onChildDraw 제스처 그림 구현
5. RecyclerViewSwipeDecorator.Builder
스와이프 꾸미기
6. attachToRecyclerView(recyclerView)
적용할 recyclerView 변수 넘기기
class MainActivity : AppCompatActivity() {
private lateinit var adapter: UserAdapter
private var userList: ArrayList<User> = ArrayList()
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()
ItemTouchHelper(object: ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT){
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
var position: Int = viewHolder.bindingAdapterPosition
when(direction){
ItemTouchHelper.LEFT ->{
var uId: Int? = userList.get(position).id
var uName: String? = userList.get(position).userName
var uAge: String? = userList.get(position).userAge
var user: User = User(uId, uName, uAge)
//아이템 삭제
adapter.deleteUser(position)
//아이템 삭제 화면 재정리
adapter.notifyItemRemoved(position)
//DB생성
var db: AppDatabase? = AppDatabase.getDatabase(applicationContext)
//삭제 쿼리
db?.userDao()?.deleteUser(user)
}
}
}
override fun onChildDraw(
c: Canvas,
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
dX: Float,
dY: Float,
actionState: Int,
isCurrentlyActive: Boolean
) {
//스와이프 기능
RecyclerViewSwipeDecorator.Builder(c, recyclerView, viewHolder,
dX, dY, actionState, isCurrentlyActive)
.addSwipeLeftBackgroundColor(Color.RED)
.addSwipeLeftActionIcon(R.drawable.ic_delete)
.addSwipeLeftLabel("삭제")
.setSwipeLeftLabelColor(Color.WHITE)
.create()
.decorate()
super.onChildDraw(
c,
recyclerView,
viewHolder,
dX,
dY,
actionState,
isCurrentlyActive
)
}
}).attachToRecyclerView(recyclerView) //recyclerView에 스와이프 적용
}
private val activityResult: ActivityResultLauncher<Intent> = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()){
if(it.resultCode == RESULT_OK){
//돌아온 값이 OK라면
//사용자 조회
loadUserList()
}
}
//액티비티 백그라운드에 있는데 호출되면 실행
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
//사용자 조회
loadUserList()
}
//사용자 조회
private fun loadUserList(){
val db: AppDatabase? = AppDatabase.getDatabase(applicationContext)
userList = db?.userDao()!!.getAllUser() as ArrayList<User>
if(userList.isNotEmpty()){
//데이터 적용
adapter.setUserList(userList)
}
}
}
2022.06.17 - [안드로이드] - [안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정
2022.06.06 - [안드로이드] - [안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성
2022.06.14 - [안드로이드] - [안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정
[안드로이드 코틀린] 전화 걸기(Intent.ACTION_VIEW) 기능 만들어보기 (0) | 2022.06.30 |
---|---|
[안드로이드 코틀린] 큐알코드(QR CODE) 스캔하는 방법 (0) | 2022.06.29 |
[안드로이드 코틀린] Database Room 사용법 part4 - 수정 (0) | 2022.06.27 |
[안드로이드 코틀린] Database Room 사용법 part3 - 리스트 (0) | 2022.06.26 |
[안드로이드 코틀린] Database Room 사용법 part2 - 데이터 등록 (0) | 2022.06.25 |
댓글 영역