search word = "example"
Я не могу заставить это работать. Если я ищу «xample», тогда фильтр работает нормально (я получаю «пример» обратно), но когда я ищу «пример», я получаю пустой результат вместо отфильтрованного результата.
Кажется, первый символ не распознается. Я перепробовал все.
Приведенный ниже код является примером реализации.
Фрагмент. java
SearchText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
adapter.getFilter().filter(arg0.toString().toLowerCase());
}
@Override
public void afterTextChanged(final Editable arg0) {
}
});
Адаптер. java
public class Adapter extends BaseAdapter {
Context context;
private ArrayList<DataModel> arraylist;
private ArrayList<DataModel> arraylistFiltered;
//constructor initializing the values
public Adapter(Context context, ArrayList<DataModel> arraylist) {
this.context = context;
this.arraylist = arraylist;
this.arraylistFiltered = arraylist;
}
public int getViewTypeCount() {
return 1;
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getCount() {
return arraylistFiltered.size();
}
@Override
public Object getItem(int position) {
return arraylistFiltered.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
//this will return the ListView Item as a View
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.listitemcreator, null, true);
holder.VarietyImage = (ImageView) convertView.findViewById(R.id.VarietyImage);
holder.VarietyName = (TextView) convertView.findViewById(R.id.VarietyName);
holder.VarietyMemoText = (TextView) convertView.findViewById(R.id.VarietyMemoText);
convertView.setTag(holder);
} else {
// the getTag returns the viewHolder object set as a tag to the view
holder = (ViewHolder) convertView.getTag();
}
if (arraylistFiltered.get(position).getImages().equals("null")) {
Picasso.get().load(R.mipmap.iconapp).into(holder.VarietyImage);
} else {
Picasso.get().load("" + arraylistFiltered.get(position).getImages()).into(holder.VarietyImage);
}
//holder.VarietyImage.setImageBitmap(arraylist.get(position).getImages());
holder.VarietyName.setText(arraylistFiltered.get(position).getName());
holder.VarietyMemoText.setText(arraylistFiltered.get(position).getMemoText());
return convertView;
}
private class ViewHolder {
protected TextView VarietyName, VarietyMemoText;
protected ImageView VarietyImage;
}
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint == null || constraint.length() == 0) {
filterResults.count = arraylist.size();
filterResults.values = arraylist;
} else {
ArrayList<DataModel> resultsModel = new ArrayList<>();
String searchStr = constraint.toString().toLowerCase().trim();
for (DataModel itemsModel : arraylist) {
if (itemsModel.getName().contains(searchStr)) {
resultsModel.add(itemsModel);
Log.e("Search -> ", "performFiltering: " + searchStr);
}
filterResults.count = resultsModel.size();
filterResults.values = resultsModel;
}
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
arraylistFiltered = (ArrayList<DataModel>) results.values;
notifyDataSetChanged();
}
};
return filter;
}
}
DataModel. java
public class DataModel {
private String ID, Images, Name, MemoText;
// Setting Images and getting Images
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
// Setting Images and getting Images
public String getImages() {
return Images;
}
public void setImages(String Images) {
this.Images = Images;
}
// Setting Name and getting Name
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
// Setting MemoText and getting MemoText
public String getMemoText() {
return MemoText;
}
public void setMemoText(String MemoText) {
this.MemoText = MemoText;
}
}
Большое спасибо!