Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取在Recyclerview BaseAdapter中单击的项目的位置_Android_Android Recyclerview_Baseadapter - Fatal编程技术网

Android 获取在Recyclerview BaseAdapter中单击的项目的位置

Android 获取在Recyclerview BaseAdapter中单击的项目的位置,android,android-recyclerview,baseadapter,Android,Android Recyclerview,Baseadapter,我正在尝试实现一个搜索视图,该视图在Recyclerview中显示结果。为此,我使用了BaseAdapter作为recyclerview的适配器。现在,我希望每当用户单击recyclerview中的某个特定项(或外行术语中的某个特定搜索查询)时,它都应该返回其位置。我尝试过使用getAdapterPosition、setonItemClickListener和所有其他可能的方法,但它们似乎都不起作用。我已附上我的代码以供参考。任何形式的帮助都是值得的 public class SearchAda

我正在尝试实现一个搜索视图,该视图在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);
            }


        }

    }
}
公共类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;

可能重复的Does
BaseAdapter
甚至使用
RecyclerView
我认为只受支持。您可以通过
get>获得当前位置AdapterPosition()在OnClickListener.中,我已经提到getAdapterPosition()在我的案例中不起作用(可能是因为我使用了BaseAdapter而不是RecyclerView.Adapter)。我已经提到getAdapterPosition()在我的案例中不起作用(可能是因为我使用了BaseAdapter而不是RecyclerView.Adapter)。