Skip to content
This repository has been archived by the owner on Nov 23, 2024. It is now read-only.

Latest commit

 

History

History
188 lines (129 loc) · 5.85 KB

README_ko.md

File metadata and controls

188 lines (129 loc) · 5.85 KB


English

Download Android CI

더이상 반복적인 Adapter와 ViewHolder 코드를 작성하지 마세요.
슬러시가 RecyclerView를 쉽고 빠르게 사용할 수 있도록 도와줍니다.

이 프로젝트의 목표는 엄청 복잡하지 않은 RecyclerView는 슬러시로 만들 수 있게 하는 것입니다.

Features

  • ItemClickListener
  • DataBinding
  • DiffCallback
  • ObservableArrayList
  • LiveData
  • MultiType Adapter
  • (Divider)ItemDecoration
  • Swipe option

Setup

build.gradle(app)에 아래 dependency를 추가해주세요.

dependencies {
    implementation 'in.seunghyun:slush:1.2.2'
}

Basic Usage

Slush라는 하나의 클래스에서 모든 기능을 사용할 수 있습니다.

기본적으로 아래 코드를 작성해야 합니다.
(여기서 SimpleItem 부분은 사용할 아이템 클래스로 바꿔주면 됩니다.)

Slush.SingleType<SimpleItem>()
    .setItemLayout(R.layout.simple_binding_item) // 아이템 레이아웃 설정
    .setLayoutManager(LinearLayoutManager(this)) // LayoutManager 설정 (이미 있다면 안써도 됨)
    .onBind { view, item ->
        view.itemName.text = item.name
    }
    .into(recyclerView)

onBind에서는 아이템 레이아웃의 뷰들을 초기화해줍니다. (기존 RecyclerView 어댑터에서 onBindViewHolder와 비슷합니다.)

ItemListEditor

아이템 리스트를 수정할 수 있게 해주는 인터페이스입니다.

val result = Slush.SingleType<SimpleItem>()
    // 중간 코드 생략
    .into(recyclerView)
val itemListEditor = result.itemListEditor

사용 가능한 메소드는 여기에 나와 있습니다.

DataBinding

슬러시는 데이터바인딩을 지원합니다.

데이터바인딩을 사용하려면 onBind 부분을 onBindData 로 바꿔야 합니다.

.onBindData<SimpleItemBinding> { binding, item ->
    binding.item = item
}

그리고 SimpleItemBinding 부분에 생성된 바인딩 클래스를 넣어주면 됩니다.

LiveData, ObservableList

LiveData 또는 ObservableList를 사용한다면, 슬러시가 자동으로 리스트를 관찰하고 RecyclerView를 업데이트해주기 때문에 ItemListEditor를 사용할 필요가 없습니다.

LiveData

val itemsLiveData = MutableLiveData<List<SimpleItem>>()

Slush.SingleType<SimpleItem>()
    // 중간 코드 생략
    .setItems(itemsLiveData, lifecycleOwner)
    .into(recyclerView)

전체 코드

Furthermore

LiveData를 사용할 때는 기본적으로 BasicDiffCallback이 적용됩니다.
DiffCallback 사용을 원치 않는다면 setItems의 세 번째 인자로 false를 넣어주면 됩니다.

.setItems(itemsLiveData, lifecycleOwner, false)

ObservableList

val observableItems = ObservableArrayList<SimpleItem>()

Slush.SingleType<SimpleItem>()
    // 중간 코드 생략
    .setItems(observableItems)
    .into(recyclerView)

전체 코드

Furthermore

ObservableList를 사용할 때는 슬러시가 자동으로 observer를 제거해주지 않습니다.
그래서 observer를 제거 하기 위해서 아래와 같이 ObserveController를 사용할 수 있습니다.

val result = Slush.SingleType<SimpleItem>()
    // 중간 코드 생략
    .setItems(observableItems)
    .into(recyclerView)

val observeController = ObserveController(result)
observeController.stopObserving()

Options

선택적으로 적용할 수 있는 설정들입니다.

setItems

.setItems(items)

리스트에 들어갈 초기 아이템들을 설정해줍니다.

onItemClick

.onItemClick { clickedView, position ->
    Log.d(TAG, "Clicked: $position")
}

아이템이 클릭 되었을 때 실행될 리스너를 설정해줍니다.

setDiffCallback

.setDiffCallback(BasicDiffCallback())

ItemListEditorchangeAll을 호출할 때 사용되는 DiffCallback을 설정합니다.
기본적으로 changeAll을 호출하면 리스트의 모든 데이터가 교체되지만 DiffCallback을 설정하면 수정된 부분만 바뀌기 때문에 애니메이션이 생깁니다.
SlushDiffCallback을 상속하여 커스텀 DiffCallback을 사용할 수도 있습니다.

Samples

여기에서 샘플 코드를 볼 수 있습니다.

License

MIT License

Copyright (c) 2020 SeungHyun

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.