我正在尝试实施一个在Recyclerview中显示结果的搜索视图。为此,我使用BaseAdapter作为recyclerview的适配器。现在,只要用户点击recyclerview中的特定项目(或以外行术语中的特定搜索查询),我就想要它,它应该返回我的位置。我尝试过使用getAdapterPosition,setonItemClickListener和所有其他可能的方法,但它们似乎都没有用。我附上了我的代码以供参考。任何形式的帮助都会很明显。
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);
}
}
}
}
答案 0 :(得分:0)
试试这个:
int position = getAdapterPosition();
答案 1 :(得分:0)
在onBindViewHolder
中为您的视图设置一个点击监听器,在其中使用mRecyclerView.getChildLayoutPosition((View)sender);
(mRecyclerView是您在适配器中定义的RecyclerView,并在您的public Adapter
方法中分配如下: mRecyclerView = recyclerView;