android - 如何按值对 Recyclerview 的 Firebase 实时数据库 HashMap 数据进行排序?
问题描述
我正在制作一个在 Horizontal Recyclerview 中显示短片的应用程序。现在我正在 Recyclerview 中填充所有短片,但我想通过“rankOrder”对它们进行排序。
我将 dataSnapshot 作为 HashMap 获取,并且我知道 HashMap 没有排序。我已经尝试过map.toList().sortedby....
,比较器和很多其他的东西,但我不知道如何按“rankOrder”对我的 recyclerview 进行排序
有人能帮我吗?我希望我的 recyclerview 中的短片按“rankOrder”排序。“rankOrder”是一个 Int。
我正在使用科特林。我对此有点陌生,所以请详细解释一下。
这是我的“HomeView.kt”
val originalStart = trendingMoviesDB.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
//get Channel IDs
for (ChannelIDs in dataSnapshot.children) {
val channelID = ChannelIDs.key!!
trendingMoviesDB.child(channelID).addListenerForSingleValueEvent(object :
ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
//get Channel Names
for (ChannelNames in dataSnapshot.children) {
val channelName = ChannelNames.key!!
trendingMoviesDB.child(channelID).child(channelName)
.addListenerForSingleValueEvent(
object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (MovieID in dataSnapshot.children) {
val movieID = MovieID.key!!
trendingMoviesDB.child(channelID).child(channelName).child(movieID).orderByChild("rankOrder")
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val map: HashMap<String, Any> =
dataSnapshot.value as HashMap<String, Any>
val mTitle = map["movieTitle"] as String
val mMovieFeaturePhoto = map["movieFeaturePhoto"] as String
val mChannelId = map["channelID"] as String
val mChannelName = map["channelName"] as String
val mMovieID = map["movieID"] as String
val mMovieDescription = map["movieDescription"] as String
val mMovieUrl = map["movieURL"] as String
val mMovieCredits = map["movieCredits"] as String
val mTimeStamp = map["timeStamp"] as Int
val mRankOrder = map["rankOrder"] as Int
fvOriginals.addAll(
listOf(
TrendingMoviesModel(
movieTitle = mTitle,
movieFeaturePhoto = mMovieFeaturePhoto,
movieDescription = mMovieDescription,
movieCredits = mMovieCredits,
channelName = mChannelName,
channelID = mChannelId,
movieURL = mMovieUrl,
movieID = mMovieID,
rankOrder = mRankOrder,
timeStamp = mTimeStamp
)
)
)
originalsAdapter.notifyDataSetChanged()
}
override fun onCancelled(error: DatabaseError) {
}
})
}
这是我的 RecyclerAdapter:
class TrendingMovieAdapter(val context: Context, private val fvOriginals: List<TrendingMoviesModel>): RecyclerView.Adapter<TrendingMovieAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(TrendingMovieCellBinding.inflate(LayoutInflater.from(parent.context),parent,false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(fvOriginals[position])
holder.itemView.setOnClickListener {
val model = fvOriginals[position]
var gMovieTitle : String = model.movieTitle
var gMovieFeaturePhoto : String = model.movieFeaturePhoto
var gMovieDesc : String = model.movieDescription
var gChannelID : String = model.channelID
var gChannelName : String = model.channelName
var gMovieID : String = model.movieID
var gMovieCredits : String = model.movieCredits
var gMovieUrl : String = model.movieURL
val intent = Intent(context,MovieDetailActivity::class.java)
intent.putExtra("iMovieTitle", gMovieTitle)
intent.putExtra("iMovieFeaturePhoto", gMovieFeaturePhoto)
intent.putExtra("iMovieDesc", gMovieDesc)
intent.putExtra("iChannelID", gChannelID)
intent.putExtra("iChannelName",gChannelName)
intent.putExtra("iMovieID", gMovieID)
intent.putExtra("iMovieCredits",gMovieCredits)
intent.putExtra("iMovieUrl", gMovieUrl)
context.startActivity(intent)
}
}
override fun getItemCount() = fvOriginals.size
inner class ViewHolder(private val binding: TrendingMovieCellBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(trendingMoviesModel: TrendingMoviesModel) {
binding.movieTitle.text = trendingMoviesModel.movieTitle
Glide.with(context).load(trendingMoviesModel.movieFeaturePhoto).into(binding.trendingMoviePoster)
}
}
}
这是我的模型类:
data class TrendingMoviesModel(
var channelID: String = "",
var channelName: String = "",
var movieID: String = "",
var movieFeaturePhoto: String = "",
var movieTitle: String = "",
var movieDescription: String,
var movieURL: String = "",
var movieCredits: String = "",
var rankOrder: Int = 0,
var timeStamp: Int = 0
)
以下是我的数据在 Firebase 实时数据库中的结构:
解决方案
推荐阅读
- haskell - 简化存储在 ReaderT 环境中的函数的调用
- abap - SOST tcode 上损坏的 PDF 附件
- html - 为什么 css 过渡不适用于 :target?
- amazon-s3 - 无法运行 s3 sink 连接器以在 Minio 上持久保存 kafka 数据
- python - 注册用户时发送电子邮件出错
- sql - 仅向 PostgreSQL 表添加非重复值
- python-3.x - 使用 Pyrebase 从 Google App Engine 将 JSON 文件上传到 Firebase 存储
- c# - 如何转置数据表以获取 C# 中的第二个数据表?
- python-3.x - 如何使用matplotlib从带有熊猫的未堆叠数据框中绘制多个图表
- python - 试图一次运行多个功能?