将数据从我的片段发送到 Viewmodel 时片段未附加到活动

时间:2021-07-28 00:50:51

标签: android kotlin native

从我的 fragmentViewModel 发送数据时出现问题:

<块引用>

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 的原因?

0 个答案:

没有答案