【问题标题】:Filter data from Room Database and visualize in recycler view从房间数据库中过滤数据并在回收站视图中可视化
【发布时间】:2020-12-23 15:40:13
【问题描述】:

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

这是我的数据类:

@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。

感谢您的帮助

【问题讨论】:

    标签: android kotlin android-recyclerview android-room


    【解决方案1】:

    创建一个 UserWod 的空列表,并从原始列表中添加具有选定日期的元素。然后在 recyclerview 中使用这个列表。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-20
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      相关资源
      最近更新 更多