【发布时间】:2021-08-17 08:08:24
【问题描述】:
它是主要的 Activity 代码(已编辑)
在这里,我尝试添加 searchView 并过滤该 recyclerView,但我遇到了与 getfilter() 相关的问题。在 MainActivity 类 > searchView.setOnQuery... > mAdapter.getFilter().filter(query)。 可能是我错过了什么或者我做错了什么。
class MainActivity : AppCompatActivity() {
var recyclerView: RecyclerView? = null
var mAdapter: RecyclerView.Adapter<*>? = null
var layoutManager: RecyclerView.LayoutManager? = null
var personUtilsList: MutableList<PersonUtils>? = null
var personUtils: PersonUtils? = null
var rq: RequestQueue? = null
var request_url = "https://sheetdb.io/api/v1/wgkdzpdiyflckl9"
private lateinit var adp: CustomRecyclerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
rq = Volley.newRequestQueue(this)
recyclerView = findViewById<View>(R.id.recycleViewContainer) as RecyclerView
recyclerView!!.setHasFixedSize(true)
layoutManager = LinearLayoutManager(this)
recyclerView!!.setHasFixedSize(true)
recyclerView!!.layoutManager = layoutManager
personUtilsList = java.util.ArrayList()
sendRequest()
search.addTextChangedListener {
//search is a editText
object : TextWatcher{
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(s: Editable?) {
filterList(s.toString())
} } }
}
sendRequest{...}
private fun filterList(toString: String) {
var temp: MutableList<PersonUtils> = ArrayList()
for (data in personUtilsList!!){
if(data.personFirstName!!.contains(toString.capitalize())
){
temp.add(data)
}
}
adp.updateList(temp)
}
}
是适配器类(已编辑)
public class CustomRecyclerAdapter(private val context: Context, personUtils: List<PersonUtils>)
: RecyclerView.Adapter<CustomRecyclerAdapter.ViewHolder>(), Filterable {
private var personUtils: MutableList<PersonUtils>
private var utilsFilterList: MutableList<PersonUtils>
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.single_list_item, parent, false)
return ViewHolder(v)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemView.tag = personUtils[position]
val pu = personUtils[position]
holder.pName.text = pu.personFirstName.toString() + " .58-" + pu.personLastName.toString()
holder.pJobProfile.text = pu.jobProfile
holder.Department.text = pu.Department
holder.email.text = pu.Email
holder.phN.text = pu.PhoneNo
Glide.with(this.context).load(pu.imgUrl.toString()).into(holder.img!!)
}
fun updateList(temp : MutableList<PersonUtils>){
personUtils = temp
notifyDataSetChanged()
}
override fun getItemCount(): Int {
return personUtils.size
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var pName: TextView
var pJobProfile: TextView
var Department: TextView
var email: TextView
var phN: TextView
var img: ImageView? = null
init {
pName = itemView.findViewById<View>(R.id.pNametxt) as TextView
pJobProfile = itemView.findViewById<View>(R.id.pJobProfiletxt) as TextView
Department = itemView.findViewById<View>(R.id.department_Branch) as TextView
email = itemView.findViewById<View>(R.id.user_email) as TextView
phN = itemView.findViewById<View>(R.id.user_phNo) as TextView
img = itemView.findViewById<View>(R.id.userImg) as ImageView
itemView.setOnClickListener { view ->
val cpu = view.tag as PersonUtils
Toast.makeText(view.context,
"Copied to clipboard", Toast.LENGTH_SHORT).show()
val Clipboard = view.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val myClip = ClipData.newPlainText(cpu.personFirstName, cpu.personFirstName)
Clipboard.setPrimaryClip(myClip)
}
}
}
override fun getFilter(): Filter {
return object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
var charString = constraint.toString()
var filteredList : MutableList<PersonUtils> = mutableListOf()
if (charString.isEmpty()) {
filteredList.addAll(utilsFilterList)
} else {
val filteredList: MutableList<PersonUtils> = ArrayList()
for (row in personUtils) {
if (row.personFirstName!!.toLowerCase().contains(charString.toLowerCase())
|| row.Department!!.contains(constraint.toString())) {
filteredList.add(row)
}
}
utilsFilterList = filteredList
}
val filterResults = FilterResults()
filterResults.values = utilsFilterList
return filterResults
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
if(results !=null) {
personUtils.clear()
personUtils.addAll(results.values as Collection<PersonUtils>)
notifyDataSetChanged()
}
}
}
}
init {
this.personUtils = personUtils as MutableList<PersonUtils>
utilsFilterList = personUtils.toMutableList()
}
}
【问题讨论】:
标签: android kotlin android-recyclerview searchview