Android 刷新RecycleView的ListAdapter时出现问题
我试图观察MutableLiveData并刷新RecycleView,但它不起作用。这是我的片段代码:Android 刷新RecycleView的ListAdapter时出现问题,android,android-recyclerview,mutablelivedata,Android,Android Recyclerview,Mutablelivedata,我试图观察MutableLiveData并刷新RecycleView,但它不起作用。这是我的片段代码: class NowyZestaw : Fragment() { val setEditModeViewModel: SetEditModeViewModel by activityViewModels() @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) val bazaModel: Ba
class NowyZestaw : Fragment() {
val setEditModeViewModel: SetEditModeViewModel by activityViewModels()
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
val bazaModel: BazaModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.nowy_zestaw, container, false)
root.findViewById<RecyclerView>(R.id.flashcard_recycler).isNestedScrollingEnabled = false
return root
}
@SuppressLint("ShowToast")
override fun onViewCreated(root: View, savedInstanceState: Bundle?) {
val addFlashcard: Button = root.findViewById(R.id.dodajFiszke)
addFlashcard.setOnClickListener {
val fiszka = Fiszka(0, "test", "test", 1)
// bazaModel.dodajFiszke(fiszka)
setEditModeViewModel.addNewFlashcard(Fiszka(1, "raz", "raz", 1))
}
val recyclerView: RecyclerView = root.findViewById(R.id.flashcard_recycler)
recyclerView.layoutManager = LinearLayoutManager(root.context)
val adapter = SetAdapter()
recyclerView.adapter = adapter
setEditModeViewModel.flashcards.observe(viewLifecycleOwner, Observer { flashcardList ->
Log.d("ANDROID", flashcardList.size.toString())
adapter.submitList(flashcardList)
})
}
}
class NowyZestaw:Fragment(){
val setEditModeViewModel:setEditModeViewModel by activityViewModels()
@VisibleForTesting(否则=VisibleForTesting.PRIVATE)
val bazaModel:activityViewModels()的bazaModel
覆盖创建视图(
充气机,
容器:视图组?,
savedInstanceState:捆绑?
):查看{
val root=充气机。充气(R.layout.nowy_zestaw,容器,假)
root.findviewbyd(R.id.flashcard\u recycler).isNestedScrollingEnabled=false
返回根
}
@SuppressLint(“ShowToast”)
覆盖已创建的视图(根:视图,savedInstanceState:Bundle?){
val addFlashcard:Button=root.findViewById(R.id.dodajFiszke)
addFlashcard.setOnClickListener{
val fiszka=fiszka(0,“测试”,“测试”,1)
//bazaModel.dodajFiszke(fiszka)
setEditModeViewModel.addNewFlashcard(Fiszka(1,“raz”,“raz”,1))
}
val recyclerView:recyclerView=root.findviewbyd(R.id.flashcard\u recycler)
recyclerView.layoutManager=LinearLayoutManager(root.context)
val adapter=SetAdapter()
recyclerView.adapter=适配器
setEditModeViewModel.flashcards.observe(viewLifecycleOwner,Observer{flashcardList->
Log.d(“ANDROID”,flashcardList.size.toString())
适配器提交列表(flashcardList)
})
}
}
这是我的视图模型:
class SetEditModeViewModel : ViewModel() {
val flashcards = MutableLiveData<MutableList<Fiszka>>().apply {
value = mutableListOf()
}
fun addNewFlashcard(item: Fiszka) {
flashcards.value?.add(item)
flashcards.value = flashcards.value
}
}
class SetEditModeViewModel:ViewModel(){
val flashcards=MutableLiveData()。应用{
value=mutableListOf()
}
fun addNewFlashcard(项目:Fiszka){
抽认卡。价值?。添加(项目)
flashcards.value=flashcards.value
}
}
和xml行:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/flashcard_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/nowa_fiszka" />
</RelativeLayout>
当我单击控制台中的按钮时,会显示正确大小的列表,因此这意味着观察到的内容会得到通知。例如,当我更改智能手机方向时,项目将显示在循环视图中。更重要的是,若我观察房间数据库,它会返回LiveData—一切正常。也许它只适用于LiveData,而不适用于MutableLiveData,但我不知道为什么会发生这种情况。总而言之,我希望在单击按钮后,新项目出现在RecyclerView中。有人能帮我吗?在您的observer中,您应该调用notifyDataSetChanged()
setEditModeViewModel.flashcards.observe(viewLifecycleOwner, Observer { flashcardList ->
Log.d("ANDROID", flashcardList.size.toString())
adapter.submitList(flashcardList)
adapter.notifyDataSetChanged(); // This is needed
})