У меня есть программа, над которой я сейчас работаю. Мне нужно сделать так, чтобы, когда я нажимал кнопку «удалить» после ввода названия продукта, он удалял элемент представления переработчика из списка и базы данных. Вот скриншот того, что я имею в виду:
Я скопировал и вставил некоторые основные структуры, которые, как я знаю, мне нужно изменить. Я просто не знаю, что именно мне нужно делать. Эти разделы закомментированы.
Вот код в MainActivity.kt:
import android.os.Bundle
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private var adapter: FoodListAdapter? = null
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
adapter = FoodListAdapter(R.layout.food_row)
food_recycler.layoutManager = LinearLayoutManager(this)
food_recycler.adapter = adapter
buttonAdd.setOnClickListener { viewModel.insertFood(Food(editFoodName.text.toString())) }
// buttonDelete.setOnClickListener { viewModel.insertFood(Food(editFoodName.text.toString())) }
viewModel.allFoods?.observe(this, Observer { foods ->
foods?.let {
adapter?.setFoodList(it)
}
})
}
}
Код в FoodDao.kt:
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface FoodDao {
@Insert
fun insertFood(product: Food)
@Query("SELECT * FROM foods")
fun getAllFoods(): LiveData<List<Food>>
@Query ("SELECT * FROM foods WHERE foodName = :name")
fun findFood(name: String) : List<Food>
}
Код в MainViewModel.kt:
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
class MainViewModel(application: Application) : AndroidViewModel(application) {
private val repository: FoodRepository =
FoodRepository(application)
var allFoods: LiveData<List<Food>>?
init {
allFoods = repository.allFoods
}
fun insertFood(food: Food) {
repository.insertFood(food)
}
// fun deleteFood(food: Food) {
// repository.deleteFood(food)
// }
}
Код в FoodRepository.kt:
import android.app.Application
import android.os.AsyncTask
import androidx.lifecycle.LiveData
class FoodRepository(application: Application) {
val allFoods: LiveData<List<Food>>?
private var foodDao: FoodDao?
init {
val db: FoodDatabase? =
FoodDatabase.getDatabase(application)
foodDao = db?.foodDao()
allFoods = foodDao?.getAllFoods()
}
fun insertFood(newfood: Food) {
val task = InsertAsyncTask(foodDao)
task.execute(newfood)
}
private class InsertAsyncTask constructor(private val asyncTaskDao: FoodDao?) :
AsyncTask<Food, Void, Void>() {
override fun doInBackground(vararg params: Food): Void? {
asyncTaskDao?.insertFood(params[0])
return null
}
}
// fun deleteFood(newfood: Food) {
// val task = DeleteAsyncTask(foodDao)
// task.execute(newfood)
// }
//
// private class DeleteAsyncTask constructor(private val asyncTaskDao: FoodDao?) :
// AsyncTask<Food, Void, Void>() {
//
// override fun doInBackground(vararg params: Food): Void? {
// asyncTaskDao?.insertFood(params[0])
// return null
// }
// }
}