instance=this
}
}
}
}
Repository
object Repository {
val bookDao:BookDao=AppDatabase.getDatabase(MyApp.context).bookDao()
//查询所有
fun loadAllBook():LiveData<List>{
return bookDao.loadAllBook()
}
//修改图书价格
fun updateBookPrice(name:String,id:Long){
bookDao.updateBookPrice(name,id)
}
//添加图书
fun insertBook(book: Book):Long{
return bookDao.insertBook(book)
}
//根据id删除
fun deleteBookById(id:Long):Int{
return bookDao.deleteBookById(id)
}
}
MainViewModel
class MainViewModel :ViewModel() {
//查询所有的book
fun getAll():LiveData<List>{
return Repository.loadAllBook()
}
}
MainActivity
这里要注意数据库操作是属于耗时的操作,Room默认是不允许放在主线程中进行数据库操作,所以我们把对数据库增删改的操作放到了子线程中。
class MainActivity : AppCompatActivity() {
private lateinit var binding:ActivityMainBinding
private val list=ArrayList()
private lateinit var adapter: BookAdapter
private val mainViewModel by lazy {
ViewModelProvider(this).get(MainViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding= ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//初始化适配器
adapter=BookAdapter(R.layout.item_book,list)
binding.rvBook.adapter=adapter
//viewModel+liveData监听数据变化—数据库数据一旦发生变化 这里就会收到通知
mainViewModel.getAll().observe(this, Observer {
list.clear()
Log.d(TAG, “onCreate: ${it.size}”)
list.addAll(it)
adapter.notifyDataSetChanged()
})
//注册点击事件
adapter.addChildClickViewIds(R.id.btnDelete,R.id.btnUpdate)
//item子控件点击事件
adapter.setOnItemChildClickListener(object :OnItemChildClickListener{
override fun onItemChildClick(
adapter: BaseQuickAdapter<*, *>,
view: View,
position: Int
) {
if(view.idR.id.btnDelete){//删除按钮
thread {
Repository.deleteBookById(list[position].id)
}
}else if(view.idR.id.btnUpdate){//修改按钮
thread {
Repository.updateBookPrice(“我被修改了!!”,list[position].id)
}
}
}
})
//添加
binding.btnAdd.setOnClickListener {
val name = binding.edtBook.text.toString().trim()
val price = binding.edtPrice.text.toString()
if(name==“”||price==“”){
Toast.makeText(this, “请填写完整”, Toast.LENGTH_SHORT).show()
}else{
val book=Book(name,price.toInt())
thread {
val id=Repository.insertBook(book)
Log.d(TAG, “onCreate: ${id}”)
}
}
}
}
companion object {
private const val TAG = “MainActivity”
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout
android:id=“@+id/ll_edt”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:orientation=“horizontal”
<androidx.recyclerview.widget.RecyclerView
android:id=“@+id/rv_book”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
app:layoutManager=“androidx.recyclerview.widget.LinearLayoutManager”
/>
BookAdapter
class BookAdapter(layoutId:Int,list:ArrayList):BaseQuickAdapter<Book,BaseViewHolder>(layoutId,list){
override fun convert(holder: BaseViewHolder, item: Book) {
holder.setText(R.id.tv_name,item.name.toString())
holder.setText(R.id.tv_price,item.price.toString())
}
}
item_book.xml
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip204888 备注Android获取(资料价值较高,非无偿)
最后
代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。
所以,长征路还长,大家还是好好地做个务实的程序员吧。
最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~
1586075653)]
最后
代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。
所以,长征路还长,大家还是好好地做个务实的程序员吧。
最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~