プロジェクト

全般

プロフィール

« | » 

リビジョン cd1eea83

高徹 高橋 徹 さんが約5年前に追加

refs #190 Add to delete an item by swipe operation.

差分を表示:

learn/android/TempRecorderJetpackKt/.idea/codeStyles/Project.xml
<package name="" alias="true" withSubpackages="true" />
</value>
</option>
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
learn/android/TempRecorderJetpackKt/.idea/codeStyles/codeStyleConfig.xml
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>
learn/android/TempRecorderJetpackKt/app/src/main/java/com/torutk/android/temprecorder/jetpackkt/MainActivity.kt
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.torutk.android.temprecorder.jetpackkt.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
......
val adapter = TemperatureAdapter()
binding.recyclerviewMainRecord.adapter = adapter
temperatureViewModel.temperatureList.observe(this, Observer {
temperatureViewModel.temperatureList.observe(this, {
it?.let {
adapter.submitList(it)
}
})
val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
ItemTouchHelper.UP or ItemTouchHelper.DOWN,
ItemTouchHelper.LEFT
) {
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
val from = viewHolder.adapterPosition
val to = target.adapterPosition
recyclerView.adapter?.notifyItemMoved(from, to)
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
viewHolder.let {
val position = viewHolder.adapterPosition
binding.recyclerviewMainRecord.adapter?.notifyItemRemoved(position)
val temperature = adapter.getTemperatureAtPosition(position)
temperatureViewModel.deleteTemperature(temperature)
}
}
})
itemTouchHelper.attachToRecyclerView(binding.recyclerviewMainRecord)
}
override fun onResume() {
learn/android/TempRecorderJetpackKt/app/src/main/java/com/torutk/android/temprecorder/jetpackkt/MainViewModel.kt
}
}
fun deleteTemperature(temperature: Temperature) {
viewModelScope.launch {
temperatureRepository.delete(temperature)
}
}
class Factory(val app: Application) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MainViewModel::class.java)) {
learn/android/TempRecorderJetpackKt/app/src/main/java/com/torutk/android/temprecorder/jetpackkt/TemperatureAdapter.kt
holder.bind(item)
}
fun getTemperatureAtPosition(position: Int): Temperature {
return getItem(position)
}
}
class TemperatureDiffCallback : DiffUtil.ItemCallback<Temperature>() {
learn/android/TempRecorderJetpackKt/app/src/main/java/com/torutk/android/temprecorder/jetpackkt/database/TemperatureDao.kt
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
......
fun get(key: Long): TemperatureEntity?
@Query("SELECT * FROM Temperatures ORDER BY id DESC")
fun getAllTemperatures(): LiveData<List<TemperatureEntity>>
@Delete
suspend fun delete(temperature: TemperatureEntity)
}
learn/android/TempRecorderJetpackKt/app/src/main/java/com/torutk/android/temprecorder/jetpackkt/repository/TemperatureRepository.kt
)
}
suspend fun delete(temperature: Temperature) {
database.temperatureDao.delete(
TemperatureEntity(
id = temperature.id, measuredAt = temperature.measuredAt, measurement = temperature.measurement
)
)
}
suspend fun refreshTemperatures() {
withContext(Dispatchers.IO) {
// リモートデータソースから取得したデータを、ローカルデータベースに格納する等

他の形式にエクスポート: Unified diff