Android 获取在Recyclerview BaseAdapter中单击的项目的位置
我正在尝试实现一个搜索视图,该视图在Recyclerview中显示结果。为此,我使用了BaseAdapter作为recyclerview的适配器。现在,我希望每当用户单击recyclerview中的某个特定项(或外行术语中的某个特定搜索查询)时,它都应该返回其位置。我尝试过使用getAdapterPosition、setonItemClickListener和所有其他可能的方法,但它们似乎都不起作用。我已附上我的代码以供参考。任何形式的帮助都是值得的Android 获取在Recyclerview BaseAdapter中单击的项目的位置,android,android-recyclerview,baseadapter,Android,Android Recyclerview,Baseadapter,我正在尝试实现一个搜索视图,该视图在Recyclerview中显示结果。为此,我使用了BaseAdapter作为recyclerview的适配器。现在,我希望每当用户单击recyclerview中的某个特定项(或外行术语中的某个特定搜索查询)时,它都应该返回其位置。我尝试过使用getAdapterPosition、setonItemClickListener和所有其他可能的方法,但它们似乎都不起作用。我已附上我的代码以供参考。任何形式的帮助都是值得的 public class SearchAda
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);
}
}
}
}
公共类SearchAdapter扩展BaseAdapter实现可过滤{
私有数组列表数据;
私人字符串[]建议;
私人可提取建议图标;
私人充气机;
私有布尔省略;
公共SearchAdapter(上下文,字符串[]建议){
充气器=充气器。从(上下文);
数据=新的ArrayList();
这个.建议=建议;
}
公共SearchAdapter(上下文上下文、字符串[]建议、可绘制建议图标、布尔省略){
充气器=充气器。从(上下文);
数据=新的ArrayList();
这个.建议=建议;
this.suggestionIcon=suggestionIcon;
this.ellipsize=ellipsize;
}
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
如果(!TextUtils.isEmpty(约束)){
//检索自动完成结果。
List searchData=new ArrayList();
for(字符串:建议){
if(string.toLowerCase().contains(constraint.toString().toLowerCase())){
searchData.add(字符串);
}
}
//将数据分配给FilterResults
filterResults.values=搜索数据;
filterResults.count=searchData.size();
}
返回过滤器结果;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
如果(results.values!=null){
数据=(ArrayList)results.values;
notifyDataSetChanged();
}
}
};
回流过滤器;
}
@凌驾
public int getCount(){
返回data.size();
}
@凌驾
公共对象getItem(int位置){
返回数据。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
建议持票人持票人;
if(convertView==null){
convertView=充气机。充气(R.layout.suggest_项,父项,false);
viewHolder=新建议viewHolder(convertView);
convertView.setTag(viewHolder);
}否则{
viewHolder=(SuggestionViewHolder)convertView.getTag();
}
字符串currentListData=(字符串)getItem(位置);
viewHolder.textView.setText(currentListData);
if(省略){
viewHolder.textView.setSingleLine();
viewHolder.textView.setEllipsize(TextUtils.TruncateAt.END);
}
返回视图;
}
私有类建议ViewHolder{
文本视图文本视图;
图像视图图像视图;
公共建议视图持有者(视图转换视图){
textView=(textView)convertView.findViewById(R.id.suggestion\u text);
如果(suggestionIcon!=null){
imageView=(imageView)convertView.findViewById(R.id.suggestion\u图标);
imageView.setImageDrawable(suggestionIcon);
}
}
}
}
试试这个:
int position = getAdapterPosition();
试试这个:
int position = getAdapterPosition();
在
onBindViewHolder
中为您的视图设置一个单击侦听器,并在其内部使用mRecyclerView.getChildLayoutPosition((视图)sender)
(mRecyclerView是在适配器中定义并在公共适配器中分配给它的RecyclerView,如下所示:mRecyclerView=RecyclerView;
在onBindViewHolder
中为您的视图设置一个单击侦听器,并在其内部使用mRecyclerView.getChildLayoutPosition((视图)sender);
(mRecyclerView是您在适配器中定义的RecyclerView,并在public adapter
方法中分配它,如下所示:mRecyclerView=RecyclerView;
可能重复的DoesBaseAdapter
甚至使用RecyclerView
我认为只受支持。您可以通过get>获得当前位置AdapterPosition()在OnClickListener.中,我已经提到getAdapterPosition()在我的案例中不起作用(可能是因为我使用了BaseAdapter而不是RecyclerView.Adapter)。我已经提到getAdapterPosition()在我的案例中不起作用(可能是因为我使用了BaseAdapter而不是RecyclerView.Adapter)。