【问题标题】:How to use Snackbar in RecyclerView adapter如何在 RecyclerView 适配器中使用 Snackbar
【发布时间】:2021-03-16 23:41:33
【问题描述】:

当尝试为我的 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
    }
}

【问题讨论】:

  • 视图应该是组件的根视图。因此,为组件片段或活动提供回调并在那里显示 Snackbar。
  • @ADM Unresolved reference: 'requireActivity'

标签: android kotlin android-recyclerview android-snackbar


【解决方案1】:

试试这个:

val mSnackbar = Snackbar.make((mCtx as Activity).findViewById(android.R.id.content), mCtx.getString(R.string.xxx), Snackbar.LENGTH_INDEFINITE)

【讨论】:

  • Unresolved reference: 'requireActivity' and 'getString'
  • @Swarthy46 这很奇怪,它适用于我的情况。尝试重建项目?
  • 这是在适配器中使用,而不是在片段中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多