使用搜索过滤器应用搜索时,RecyclerView获取错误的位置

时间:2018-01-19 07:00:11

标签: java android

我使用RecyclerView并且我已经在其上实施了搜索过滤器,我在这里面临一个问题

当我搜索当我按下项目时我得错了位置没有我搜索过它请帮我解决这个问题

例如项目编号2名称“Android”搜索“android”后位置转到第一位..为什么会出现这个问题? ..谢谢

MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    public List<RecyclerItem> listItems;
    private Context mContext;


    public MyAdapter(List<RecyclerItem> listItems, Context mContext) {
        this.listItems = listItems;
        this.mContext = mContext;


    }
    @Override
    public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {

        final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false);
        final ViewHolder holder = new ViewHolder(view);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final int position = holder.getAdapterPosition();
                if (position == 0) {


                    Toast.makeText(mContext,"iOS",Toast.LENGTH_SHORT).show();

                }
                if (position == 1) {

                    Toast.makeText(mContext,"Android",Toast.LENGTH_SHORT).show();

                }

            }
        });
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        final RecyclerItem itemList = listItems.get(position);
        holder.txtTitle.setText(itemList.getTitle());
        holder.txtDescription.setText(itemList.getDescription());
        holder.txtOptionDigit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Display option menu
                PopupMenu popupMenu = new PopupMenu(mContext, holder.txtOptionDigit);
                popupMenu.inflate(R.menu.option_menu);
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {

                        switch (item.getItemId()) {
                            case R.id.mnu_item_save:
                                Toast.makeText(mContext, "Saved " + listItems.get(position).getTitle(), Toast.LENGTH_SHORT).show();
                                break;
                            case R.id.mnu_item_delete:
                                //Delete item
                                Toast.makeText(mContext, "Deleted " + listItems.get(position).getTitle(), Toast.LENGTH_SHORT).show();
                                listItems.remove(position);
                                notifyDataSetChanged();
                                break;
                            default:
                                break;
                        }
                        return false;
                    }
                });
                popupMenu.show();
            }
        });
    }

    @Override
    public int getItemCount() {
        return listItems.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private  Button buttoncalling;
        public TextView txtTitle;
        public TextView txtDescription;
        public TextView txtOptionDigit;
        public ViewHolder(View itemView) {
            super(itemView);
            txtTitle = (TextView) itemView.findViewById(R.id.txtTitle);
            txtDescription = (TextView) itemView.findViewById(R.id.txtDescription);
            txtOptionDigit = (TextView) itemView.findViewById(R.id.txtOptionDigit);
            buttoncalling  = (Button) itemView.findViewById(R.id.bbbbbbbbbb);
            buttoncalling.setOnClickListener(this);


        }

        @Override
        public void onClick(View view) {

        }
    }
}

过滤

   TextWatcher mTextWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.toString().equals("")){
                initAdapter();
            } else {
                searchItem(s.toString());
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    };

    private void initAdapter(){
        adapter.listItems.clear();
        for (int i = 0; i < 10; i++) {
            listItems.add(new RecyclerItem("Item " + (i + 1), "Welcome to Torisan channel, this is description of item " + (i+1)));
        }
        adapter.notifyDataSetChanged();
    }

    private void searchItem(String itemname){
        int resultCount = 0;
        adapter.listItems.clear();
        for (int i = 0; i < tempListItems.size(); i++){
            if (tempListItems.get(i).getTitle().contains(itemname)){
                listItems.add(new RecyclerItem("Item " + (i + 1), "Welcome to Torisan channel, this is description of item " + (i+1)));
                resultCount ++;
            }
        }
        if (resultCount == 0){
            showToast();
        }
        adapter.notifyDataSetChanged();
    }

    public void showToast() {
        // Set the toast and duration
        int toastDurationInMilliSeconds = 1000;
        mToastToShow = Toast.makeText(this, "No results found.", Toast.LENGTH_LONG);

        // Set the countdown to display the toast
        CountDownTimer toastCountDown;
        toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, 1000 /*Tick duration*/) {
            public void onTick(long millisUntilFinished) {
                mToastToShow.show();
            }
            public void onFinish() {
                mToastToShow.cancel();
            }
        };

        // Show the toast and starts the countdown
        mToastToShow.show();
        toastCountDown.start();
    }
}

2 个答案:

答案 0 :(得分:0)

FavoriteID

答案 1 :(得分:0)

请使用此

for (int i = 0; i < tempListItems.size(); i++) {
    if (listItems.get(getAdapterPosition()).getName().equals(tempListItems.get(i).getName())) {
        int selectedPos = i;  //SelectedPos is that index
        break;
    }
}
相关问题