リビジョン cd1eea83
| 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) {
|
||
|
// リモートデータソースから取得したデータを、ローカルデータベースに格納する等
|
||
refs #190 Add to delete an item by swipe operation.