我正在使用 Firebase UI 填充我的 RecyclerView,一切正常,除非我在单击按钮时尝试更改列表元素的顺序。
这是我的适配器代码:
private var query: Query = FirebaseFirestore.getInstance()
.collection("restaurant")
.orderBy("review", Query.Direction.DESCENDING)
var options: FirestoreRecyclerOptions<Restaurant> = FirestoreRecyclerOptions.Builder<Restaurant>()
.setQuery(query, Restaurant::class.java)
.build()
private var adapter: FirestoreRecyclerAdapter<*, *> =
object : FirestoreRecyclerAdapter<Restaurant, RestaurantListAdapter.ViewHolder?>(options) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RestaurantListAdapter.ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.restaurant_card_view_design, parent, false)
return RestaurantListAdapter.ViewHolder(view)
}
@SuppressLint("ResourceAsColor")
override fun onBindViewHolder(
holder: RestaurantListAdapter.ViewHolder , position: Int, model: Restaurant
) {
val sharedPref = getPreferences(Context.MODE_PRIVATE) ?: return
val defaultValue = resources.getString(R.string.def_loc_key)
val lat = sharedPref.getFloat(getString(R.string.latitude_key), defaultValue.toFloat())
val long = sharedPref.getFloat(getString(R.string.longitude_key), defaultValue.toFloat())
model.calculateDistance(lat, long)
// sets the text to the textview from our itemHolder class
holder.distance.text = String.format("%.1f mi", model.distance)
holder.name.text = model.name
holder.reviewNum.text = String.format("(%1d)", model.numReview)
holder.review.rating = model.review
if (position == 0) {
//holder.card.setCardBackgroundColor(R.color.recommendedCard)
holder.card.setCardBackgroundColor(ContextCompat.getColor(holder.card.context, R.color.recommendedCard))
}
holder.logo.setImageResource(
resources.getIdentifier(model.logo , "drawable",
packageName
))
}
}
这是我的按钮单击代码(在 onCreate() 内):
val sortButton = findViewById<ImageButton>(R.id.sortButton)
sortButton.setOnClickListener {
query = query.orderBy("numReviews", Query.Direction.DESCENDING) // new campo
options = FirestoreRecyclerOptions.Builder<Restaurant>()
.setQuery(query, Restaurant::class.java).build()
adapter.updateOptions(options)
}
我在最后一行收到一个错误:
类型不匹配:推断类型为 FirestoreRecyclerOptions 但没有预期的内容