如何在 RecyclerView 适配器中使用 Snackbar
How to use Snackbar in RecyclerView adapter
尝试为我的 RecyclerView 适配器使用 Snackbar 时,返回的错误似乎无法解决。在这种情况下我应该使用哪个视图?如果字符串资源显示为未解析的引用,我该如何使用它?
适配器代码
class MyAdapter(
private val mCtx: Context,
var myList: MutableList<Item>,
) : androidx.recyclerview.widget.RecyclerView.Adapter<MyAdapter.MyViewHolder>(), Filterable {
private val myListFull = myList.toMutableList()
val mSnackbar = Snackbar.make(
requireView(),
getString(R.string.my_message),
Snackbar.LENGTH_INDEFINITE
)
private val companyFilter = object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
val filteredList = ArrayList<Item>()
if (constraint == null || constraint.isEmpty()) {
filteredList.addAll(myListFull)
} else {
val filterPattern = constraint.toString().toLowerCase().trim { it <= ' ' }
for (item in myListFull) {
if (item.Name.toLowerCase().contains(filterPattern)
) {
filteredList.add(item)
}
}
}
val results = FilterResults()
results.values = filteredList
return results
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
myList.clear()
myList.addAll(results!!.values as List<Item>)
notifyDataSetChanged()
}
}
private fun String.matchesIgnoreCase(otherString: String): Boolean {
return this.toLowerCase().contains(otherString.trim().toLowerCase())
}
class MyViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView
.ViewHolder(itemView) {
var tvTitle: TextView = itemView.findViewById(R.id.title)
var tvSubtitle: TextView = itemView.findViewById(R.id.subtitle)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val inflater = LayoutInflater.from(mCtx)
val v = inflater.inflate(R.layout.list_item, parent, false)
return MyViewHolder(v)
}
override fun getItemCount(): Int {
return myList.size
}
override fun getFilter(): Filter {
return companyFilter
}
}
试试这个:
val mSnackbar = Snackbar.make((mCtx as Activity).findViewById(android.R.id.content), mCtx.getString(R.string.xxx), Snackbar.LENGTH_INDEFINITE)
尝试为我的 RecyclerView 适配器使用 Snackbar 时,返回的错误似乎无法解决。在这种情况下我应该使用哪个视图?如果字符串资源显示为未解析的引用,我该如何使用它?
适配器代码
class MyAdapter(
private val mCtx: Context,
var myList: MutableList<Item>,
) : androidx.recyclerview.widget.RecyclerView.Adapter<MyAdapter.MyViewHolder>(), Filterable {
private val myListFull = myList.toMutableList()
val mSnackbar = Snackbar.make(
requireView(),
getString(R.string.my_message),
Snackbar.LENGTH_INDEFINITE
)
private val companyFilter = object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
val filteredList = ArrayList<Item>()
if (constraint == null || constraint.isEmpty()) {
filteredList.addAll(myListFull)
} else {
val filterPattern = constraint.toString().toLowerCase().trim { it <= ' ' }
for (item in myListFull) {
if (item.Name.toLowerCase().contains(filterPattern)
) {
filteredList.add(item)
}
}
}
val results = FilterResults()
results.values = filteredList
return results
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
myList.clear()
myList.addAll(results!!.values as List<Item>)
notifyDataSetChanged()
}
}
private fun String.matchesIgnoreCase(otherString: String): Boolean {
return this.toLowerCase().contains(otherString.trim().toLowerCase())
}
class MyViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView
.ViewHolder(itemView) {
var tvTitle: TextView = itemView.findViewById(R.id.title)
var tvSubtitle: TextView = itemView.findViewById(R.id.subtitle)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val inflater = LayoutInflater.from(mCtx)
val v = inflater.inflate(R.layout.list_item, parent, false)
return MyViewHolder(v)
}
override fun getItemCount(): Int {
return myList.size
}
override fun getFilter(): Filter {
return companyFilter
}
}
试试这个:
val mSnackbar = Snackbar.make((mCtx as Activity).findViewById(android.R.id.content), mCtx.getString(R.string.xxx), Snackbar.LENGTH_INDEFINITE)