I am trying to implement a search view that displays result in a Recyclerview. For that I have used a BaseAdapter as adapter for recyclerview. Now I want that whenever the user clicks on a particular item in the recyclerview(or on a particular search query in layman terms), it should return me its position. I have tried using getAdapterPosition, setonItemClickListener and all other possible means but all of them doesnt seem to work. I have attached my code for reference. Any kind of help would be appreciable.
public class SearchAdapter extends BaseAdapter implements Filterable {
private ArrayList<String> data;
private String[] suggestions;
private Drawable suggestionIcon;
private LayoutInflater inflater;
private boolean ellipsize;
public SearchAdapter(Context context, String[] suggestions) {
inflater = LayoutInflater.from(context);
data = new ArrayList<>();
this.suggestions = suggestions;
}
public SearchAdapter(Context context, String[] suggestions, Drawable suggestionIcon, boolean ellipsize) {
inflater = LayoutInflater.from(context);
data = new ArrayList<>();
this.suggestions = suggestions;
this.suggestionIcon = suggestionIcon;
this.ellipsize = ellipsize;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (!TextUtils.isEmpty(constraint)) {
// Retrieve the autocomplete results.
List<String> searchData = new ArrayList<>();
for (String string : suggestions) {
if (string.toLowerCase().contains(constraint.toString().toLowerCase())) {
searchData.add(string);
}
}
// Assign the data to the FilterResults
filterResults.values = searchData;
filterResults.count = searchData.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.values != null) {
data = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
}
};
return filter;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SuggestionsViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.suggest_item, parent, false);
viewHolder = new SuggestionsViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (SuggestionsViewHolder) convertView.getTag();
}
String currentListData = (String) getItem(position);
viewHolder.textView.setText(currentListData);
if (ellipsize) {
viewHolder.textView.setSingleLine();
viewHolder.textView.setEllipsize(TextUtils.TruncateAt.END);
}
return convertView;
}
private class SuggestionsViewHolder {
TextView textView;
ImageView imageView;
public SuggestionsViewHolder(View convertView) {
textView = (TextView) convertView.findViewById(R.id.suggestion_text);
if (suggestionIcon != null) {
imageView = (ImageView) convertView.findViewById(R.id.suggestion_icon);
imageView.setImageDrawable(suggestionIcon);
}
}
}
}