【发布时间】:2019-12-06 12:31:21
【问题描述】:
我尝试在回收站视图中实现搜索功能。为此,我在“Main.kt”类中编写了以下代码
搜索功能对我来说很好用,
问题是当我从列表中搜索项目并单击该项目时,我得到了错误的位置。
请帮我解决这个问题。
adapter = DynamicListAdapter(dynamicList)
dynamic_list_recyclerview.layoutManager = LinearLayoutManager(this, LinearLayout.VERTICAL,false) as RecyclerView.LayoutManager
dynamic_list_recyclerview.adapter = adapter
adapter!!.setRecyclerViewItemClickLister(this)
我已编辑文本并添加了 addTextChangedListener
edt_search_dynamic.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun afterTextChanged(editable: Editable?) {
filter(editable.toString())
}
})
fun filter(text : String){
var filteredList = mutableListOf<DynamicModel>()
for(list in dynamicList){
if(list.vehicleno.toLowerCase().contains(text.toLowerCase())){
filteredList.add(list)
}
}
adapter?.filterList(filteredList)
}
这是我的适配器类
class DynamicListAdapter (var dynamiclist : List<DynamicModel>) : RecyclerView.Adapter<DynamicListAdapter.DynamicViewHolder>() {
var recyclerViewOnItemClickListener : RecyclerViewOnItemClickListener? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DynamicViewHolder {
val inflatedView = LayoutInflater.from(parent.context)
.inflate(R.layout.singlerowdynamiclist,parent,false)
return DynamicViewHolder(inflatedView,dynamiclist)
}
override fun getItemCount(): Int {
return dynamiclist.size
}
override fun onBindViewHolder(holder: DynamicViewHolder, position: Int) {
holder.bindItem(dynamiclist[position])
}
inner class DynamicViewHolder(itemView : View, var dynamiclists : List<DynamicModel>) : RecyclerView.ViewHolder(itemView), View.OnClickListener
{
private var txtStatus : TextView? = null
init {
txtStatus = itemView.findViewById(R.id.txtStatus)
itemView.setOnClickListener(this)
}
fun bindItem(dynamiclist : DynamicModel){
txtStatus?.text = dynamiclist.vehiclestatus
}
override fun onClick(view: View?) {
when(view){
itemView -> if(recyclerViewOnItemClickListener!= null){
recyclerViewOnItemClickListener!!.onItemClick(adapterPosition,view)
}
}
}
}
// method of outer class
fun setRecyclerViewItemClickLister(onRecyclerviewItemClickListener : RecyclerViewOnItemClickListener){
this.recyclerViewOnItemClickListener = onRecyclerviewItemClickListener
}
// for filter the list
fun filterList(dymaniclist : List<DynamicModel>){
this.dynamiclist = dymaniclist
notifyDataSetChanged()
}
}
这是我在 Main.kt 类中实现的接口
interface RecyclerViewOnItemClickListener {
fun onItemClick(position : Int, view: View)
}
【问题讨论】:
-
您的预期结果是什么?你想获得哪个职位?过滤前还是过滤后对象的位置?
-
我需要打开新的活动onItem click并发送点击位置的数据。 OnItem click 在没有应用过滤器时工作正常,但是当我在列表中搜索特定项目并单击该项目时,我没有从列表中获得所需的位置和相应的项目
-
您尝试从哪个列表中获取具有
onItemClick方法给出的位置的元素?来自未过滤的列表还是来自过滤的列表? -
如果没有应用过滤器,那么我需要来自未过滤的过滤器,如果应用了过滤器,那么它应该来自过滤的过滤器。
-
这很奇怪。您的代码在我的机器上按预期工作。我想也许您是从过滤列表中获取位置,然后尝试在未过滤列表中使用它。您能否提供任何包含数据、过滤器文本、接收到的位置和项目以及所需位置的示例?
标签: search kotlin android-recyclerview onitemclick