結果をRecyclerviewに表示する検索ビューを実装しようとしています。そのために、私はBaseAdapterをrecyclerviewのアダプターとして使用しました。今私は、ユーザーがrecyclerviewの特定のアイテム(または特定の検索クエリの素人用語)をクリックするたびに、それは私の位置を返す必要があります。私はgetAdapterPosition、setonItemClickListenerと他のすべての手段を使用してみましたが、それらのすべてが機能していないようです。参考のために私のコードを添付しました。どんな種類の助けがあっても大丈夫でしょう。Recyclerview BaseAdapterでクリックしたアイテムの位置を取得
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);
}
}
}
}
[RecyclerViewで選択された位置を取得するにはどうすればいいですか?](http://stackoverflow.com/questions/26682277/how-do-i-get-the-position-selected-in -a-recyclerview) – YUVRAJ
'BaseAdapter'は' RecyclerView'でも動作しますか?私は[RecyclerView.Adapter](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html)しかサポートしていないと思っていました。 'getAdapterPosition()'を使って現在の位置を取得します。 – Abbas
OnClickListenerのviewHolder.getAdapterPosition()を使用します。 – Maddy