如何解决构造函数数组返回空列表
大家好,我正在为我的项目实施搜索视图过滤器。为此,我创建了那个过滤器类。我从构造函数获取 mainList 。该数组来自适配器类。但是当我从 FilterFood 类调用这个列表时,它返回空列表。适配器正在通过网络获取该阵列。
适配器类:
public class Transaction extends BaseEntityUuid {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CNTRB_TYP_ID",referencedColumnName = "CNTRB_TYP_ID")
private Contribution contributionTyp;
@Column(name = "CNTRB_TYP_ID")
private String cntrbTypId;
...
}
public class ContributionTyp extends BaseEntityUuid {
@OneToMany(targetEntity = Transaction.class,mappedBy = "contributionTyp",fetch = FetchType.LAZY)
private Set<Transaction> transactions;
@NotNull
@Column(name = "CNTRB_TYP_ID")
private String cntrbTypId;
...
}
过滤器类:
class CreateListAdapter(var newFoodList : ArrayList<GroceryModel>) : RecyclerView.Adapter<Holder>() {
private var selectedList : ArrayList<String> = arrayListOf()
private val filter = FilterFood(this,newFoodList)
//var tempList = ArrayList<GroceryModel>()
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): Holder {
val itemView = LayoutInflater.from(parent.context)
.inflate(R.layout.createlist_item,parent,false)
//tempList = newFoodList
return Holder(itemView)
}
override fun onBindViewHolder(holder: Holder,position: Int) {
holder.createFoodText.text = newFoodList[position].besinİsim
holder.createFoodText.setOnClickListener {
if (holder.createFoodText.isChecked){
newFoodList[position].besinİsim?.let { it1 -> selectedList.add(it1) }
Log.i("sdasda",selectedList.toString())
}
else{
newFoodList[position].besinİsim?.let { it1 -> selectedList.remove(it1)}
Log.i("sdasda",selectedList.toString())
}
}
}
override fun getItemCount() = newFoodList.size
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView){
val createFoodText : CheckBox = itemView.findViewById(R.id.checkBoxItem)
}
fun getFilteredList(s : String) {
filter.filter(s)
}
}
片段:
class FilterFood(private val adapter : CreateListAdapter,private val mainList : ArrayList<GroceryModel>) : Filter() {
private var filteredList : ArrayList<GroceryModel> = arrayListOf()
override fun performFiltering(constraint: CharSequence?): FilterResults {
Log.i("ssss",mainList.toString())
if (constraint == null || constraint.length == 0){
filteredList = mainList
}
else{
val filterPattern : String = constraint.toString().toLowerCase().trim()
for (item in mainList){
if (item.besinİsim.toString().toLowerCase().contains(filterPattern)){
filteredList.add(item)
}
}
}
val results = FilterResults()
results.values = filteredList
return results
}
override fun publishResults(constraint: CharSequence?,results: FilterResults) {
adapter.newFoodList = results?.values as ArrayList<GroceryModel>
adapter.notifyDataSetChanged()
}
}
解决方法
您的 Filter
使用了对旧 newFoodList
的引用。如果我理解正确,您必须使用 adapter.newFoodList
而不是 mainList
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。