从房间数据库中筛选数据,并在回收器视图中进行可视化



我是android和room的新手,我需要从room数据库中获取按日期过滤的数据,并在回收器视图中可视化

这是我的数据类:

@Parcelize
@Entity(tableName = "user_wod_table")
data class UserWod(
@PrimaryKey(autoGenerate = true)
val id: Int,
val name: String,
val type: String,
val description: String,
val date:String
) : Parcelable

我有一个片段中的日历视图

private lateinit var calendarView: CalendarView
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_calendar, container, false)
calendarView = view.findViewById(R.id.calendarView)
val pm = requireContext().packageManager
val appInfo = pm.getApplicationInfo("it.alberto.wodapp", 0)
val appFile = appInfo.sourceDir
val installed: Long = File(appFile).lastModified()
//calendarView.setMinimumDate()

val events: MutableList<EventDay> = ArrayList()
calendarView.setOnDayClickListener(object : OnDayClickListener {
override fun onDayClick(eventDay: EventDay) {
val clickedDayCalendar: Calendar = eventDay.calendar
events.add(EventDay(clickedDayCalendar, R.drawable.ic_dumbbell))
calendarView.setEvents(events)
//var my_date_format: SimpleDateFormat = SimpleDateFormat("yyyyMMdd", Locale.getDefault())
//var my_date: SimpleDateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
val date = "" + clickedDayCalendar.get(Calendar.DAY_OF_MONTH) + "/" + clickedDayCalendar.get(Calendar.MONTH) + "/" + clickedDayCalendar.get(Calendar.YEAR)
Toast.makeText(activity, "" + clickedDayCalendar.get(Calendar.DAY_OF_MONTH) + "/" + clickedDayCalendar.get(Calendar.MONTH) + "/" + clickedDayCalendar.get(Calendar.YEAR),
Toast.LENGTH_LONG).show()
findNavController().navigate(R.id.action_calendarFragment_to_listUserWodFragment)
}
})
return view
}

当我点击一天,用回收器视图开始第二个片段

@InternalCoroutinesApi
private lateinit var mUserWodViewModel: UserWodViewModel

@InternalCoroutinesApi
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_list_user_wod, container, false)
val adapter = UserListAdapter()
val recyclerView  = view.recyclerView
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(requireContext())
mUserWodViewModel = ViewModelProvider(this).get(UserWodViewModel::class.java)
mUserWodViewModel.readAllData.observe(viewLifecycleOwner, { userWod ->
adapter.setData(userWod)
})

view.floatingActionButton.setOnClickListener{
findNavController().navigate(R.id.action_listUserWodFragment_to_updateUserWodFragment)
}
// Add menu
setHasOptionsMenu(true)
return view
}

现在,我可视化了所有没有过滤器的UserWod,但我只希望在选定的日期中显示UserWod。

感谢的帮助

创建一个空的UserWod列表,并从原始列表中添加日期为选定日期的元素。然后在回收视图中使用此列表。

var newlist = ArrayList<UserWod>()
originalList.forEach { item ->
if (item.date == selectedDate)
newlist.add(item)
}
adapter.updateList(newlist)

你每次都必须创建一个新的列表,所以为此创建一个单独的函数。

最新更新