描述:
我有一个 Android 应用程序,在其中一个部分用户可以选择他的技能,例如 https://stackoverflow.com 中的标签。
因此,当用户点击加号按钮时,他可以看到所有可用的技能并选择 他想要什么
如您所见,屏幕顶部有一个过滤器,用于查找用户想要添加的技能。问题来了,它有很多影响
例如,如果我输入“Eng”来查找“English”,结果将是“Spanish”
别急着告诉我,问题出在过滤算法上,因为 我的控制台记录,结果是正确的,并且过滤器只找到“英语” 更重要的是,如果我选择此选项,正确答案“英语”将显示在“西类牙语”下方
更重要的是,如果我保存更改,在我的帐户中显示我实际上选择“英语”
所以过滤是正确的,并且保存数据是正确的,问题在于显示技能名称。为什么我称它为魔法?因为控制台在显示结果之前记录了正确的名称
而且我注意到,如果我返回完整的技能列表,它也会显示错误
但与之前的情况一样,我的控制台日志显示,一切正常,并且我有正常的技能列表,没有重复
这是我的代码示例:
搜索 - 是简单的 EditText 字段
search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
chipAdapter.getFilter().filter(charSequence);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
适配器:
@Override
public void onBindViewHolder(final ChipAdapterAllSkills.ChipViewHolder holder, final int position) {
String skill = filtredSkillList.get(position).getName();
System.err.println("SKILL "+skill+" position "+position);
holder.skillChip.setChipText(skill);
holder.skillChip.setSelectable(true);
holder.skillChip.setSelected(true);
holder.skillChip.setTextColor(MainAplication.getContext().getResources().getColor(R.color.accent));
holder.skillChip.changeBackgroundColor(MainAplication.getContext().getResources().getColor(R.color.blue));
holder.skillChip.setOnSelectClickListener(new OnSelectClickListener() {
@Override
public void onSelectClick(View v, boolean selected) {
System.err.println(selected);
if(!selected) {
SelectSkills.getSkillsToAdd().add(filtredSkillList.get(position));
}else {
SelectSkills.getSkillsToAdd().remove(filtredSkillList.get(position));
}
}
});
}
@Override
public int getItemCount() {
return filtredSkillList.size();
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String target = charSequence.toString();
if (target.isEmpty()) {
filtredSkillList = skillList;
} else {
List<Skill> list = new ArrayList<>();
for (Skill s : skillList) {
if (s.getName().toLowerCase().contains(target.toLowerCase())) {
list.add(s);
System.err.println(s.getName());
}
}
filtredSkillList = list;
}
FilterResults results = new FilterResults();
results.values = filtredSkillList;
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
filtredSkillList = (ArrayList<Skill>) filterResults.values;
notifyDataSetChanged();
}
};
}
我真的不知道发生了什么,也许你们中的一些人可以帮忙)
我怀疑问题可能出在线程中,但我没有在这段代码中对它们进行任何更改
最佳答案
问题不在我的代码中。 我用来创建技能芯片的库中有一些问题。
因为与其他库一起工作都很好)
关于java - 在回收 View 中执行过滤时,屏幕上的数据显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48850421/