从我的 fragment
向 ViewModel
发送数据时出现问题:
java.lang.IllegalStateException 片段未附加到活动,关闭虚拟机,致命异常
val viewmodel :Store1_viewmodel by activityViewModels()
private lateinit var binding: FragmentShakaStoreBinding
lateinit var dataset :MutableList<item1>
lateinit var recycler :RecyclerView
lateinit var tempdataset:MutableList<item1>
lateinit var adapter: shaka_recycler_Adapter
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
binding = FragmentShakaStoreBinding.inflate(inflater,container,false)
recycler =binding.shakaRecycler
// dataset=viewmodel.get()
dataset= mutableListOf()
val curdate =LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))
lifecycleScope.launch {
val db = activity?.let { Store1_Database2.getdatabase(it?.applicationContext) }
db?.itemdao()?.getAll()?.let { dataset.addAll(it) }
adapter =shaka_recycler_Adapter(Shaka_Store(),dataset,Shaka_Store())
onclick(4)
recycler.adapter=adapter
}
recycler.addItemDecoration(DividerItemDecoration(
context,LinearLayoutManager.HORIZONTAL
))
recycler.setHasFixedSize(true)
setHasOptionsMenu(true)
return binding.root
// return inflater.inflate(R.layout.fragment_shaka__store, container, false)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.add_item,menu)
var menuittem =menu!!.findItem(R.id.search)
val searchview =menuittem.actionView as SearchView
searchview.maxWidth = Int.MAX_VALUE
searchview.setOnQueryTextListener(object :SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(p0: String?): Boolean {
// adapter.filter.filter(p0)
return true
}
override fun onQueryTextChange(p0: String?): Boolean {
adapter!!.filter.filter(p0)
Log.v("worrd",p0.toString())
return true
}
})
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId){
R.id.add_item->{
findNavController().navigate(R.id.action_shaka_Store_to_insert_item)
}
}
return super.onOptionsItemSelected(item)
}
override fun onclick(Name: Int) {
viewmodel.setitemname(Name)
}
}
这是我的视图模型代码
val context = application
private val _clicked = MutableLiveData<Int>()
val clicked :LiveData<Int> = _clicked
fun insert (data :item1){
viewModelScope.launch {
val db =Store1_Database2.getdatabase(context)
db.itemdao().insert_item(data)
Toast.makeText(context,"تم اضافة العنصر بنجاح ",Toast.LENGTH_LONG).show()
}
}
fun setitemname(name:Int){
_clicked.value = name
}
}
我正在使用 coroutines
这是否是我无法将数据从 fragment
发送到 viewmodel
的原因?