LiveData
class MainViewModel : ViewModel() {
private val _data = MutableLiveData()
val data: LiveData = _data
fun fetchData() {
val result = // データ取得
_data.value = result
}
}
Slide 22
Slide 22 text
LiveData
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
viewModel.data.observe(this, Observer {
// LiveDataが変更されるとココに通知される
})
}
}
DataBinding
class MainViewModel : ViewModel() {
private val _data = MutableLiveData()
val data: LiveData = _data
fun fetchData() {
val result = // データ取得
_data.value = result
}
}
Slide 27
Slide 27 text
DataBinding
Slide 28
Slide 28 text
DataBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private val viewModel by lazy { }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil
.setContentView(this, R.layout.activity_main)
binding.lifecycleOwner = this
binding.viewModel = viewModel
}
}
Slide 29
Slide 29 text
DataBinding
fun onClickButton() {
// ボタンが押されたときの処理
}
Room
@Entity
data class User(
@PrimaryKey val id: Int,
@ColumnInfo(name = "name") val name: String
)
@Dao
interface UserDao {
@Query("SELECT * FROM user")
fun getUsers(): List
@Insert
fun insert(user: User)
}
Slide 42
Slide 42 text
Room
@Database(entities = [User::class], version = 1)
abstract class AppDatabase: RoomDatabase() {
abstract fun userDao(): UserDao
}
Slide 43
Slide 43 text
Room
val db = Room.databaseBuilder(
requireContext(),
AppDatabase::class.java,
"my-db"
).build()
val dao = db.userDao()
// データ追加
dao.insert(User(1, "Kenji Abe"))
// データ取得
val users = dao.getUsers()
Paging
@Dao
interface UserDao {
@Query("SELECT * FROM user ORDER BY id")
fun getUsersPaging(): DataSource.Factory
}
class UserViewMode : ViewModel() {
val users = userDao.getUsersPaging().toLiveData(10)
}
Slide 46
Slide 46 text
Paging
class UsersAdapter
: PagedListAdapter(DIFF_CALLBACK) {
override fun onCreateViewHolder(/* */): ViewHolder {
// ...
return ViewHolder(view)
}
override fun onBindViewHolder((/* */) {
holder.bind(getItem(position))
}
}
Slide 47
Slide 47 text
Paging
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val adapter = UsersAdapter()
recycler.layoutManager = LinearLayoutManager(this)
recycler.adapter = adapter
viewModel.users.observe(this, Observer {
adapter.submitList(it)
})
}
}