android – 使用Searchview通过RecyclerView搜索

我想通过RecyclerView搜索,我有List< BaseOfCards> (BaseOfCards是我的getter& setter类)
我的RecyclerViewAdapter:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {


private LayoutInflater inflater;
private List<BaseOfCards> items;

//private int itemLayout;
//String cardvalue;
private Activity mActivity;

public RecyclerViewAdapter(Activity mActivity,Context context,List<BaseOfCards> items) {
    this.mActivity = mActivity;
    inflater = LayoutInflater.from(context);
    this.items = items;
    //this.itemLayout = itemLayout;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {

    View view = inflater.inflate(R.layout.custom_row,parent,false);
    MyViewHolder holder = new MyViewHolder(view,mActivity);
    return holder;
}

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

    BaseOfCards item = items.get(position);
    holder.title.setTag(item);
    holder.title.setText(item.getCardName());
}

@Override
public int getItemCount() {

    return items.size();
}

public static class MyViewHolder extends RecyclerView.ViewHolder {
    private Activity mActivity;
    TextView title;
    ImageView titileImageView;

    public MyViewHolder(View itemView,Activity mActivity) {

        super(itemView);

        titileImageView = (ImageView) itemView.findViewById(R.id.image_country);


        title = (TextView) itemView.findViewById(R.id.listText);
        this.mActivity = mActivity;

    }
}

}

我将SearchView添加到我的菜单中并在MainActivity中初始化它:

MenuItem menuItem = menu.findItem(R.id.action_search1);
    searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
    SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchView.setIconifiedByDefault(true);

接下来我需要做什么?让我的RecyclerViewAdapter实现Filterable或者什么?或者只是在* RecyclerViewAdapter **中进行类过滤,然后从我的MainActivity中调用它?

解决方法

我解决了我的问题

>让我的类RecyclerViewAdapter实现Filterable
>添加行私有列表< BaseOfCards>原稿;
>在RecyclerViewAdapter中添加方法getFilter

public Filter getFilter() {
return new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        final FilterResults oReturn = new FilterResults();
        final List<BaseOfCards> results = new ArrayList<BaseOfCards>();
        if (orig == null)
            orig  = items;
            if (constraint != null){
                if(orig !=null & orig.size()>0 ){
                    for ( final BaseOfCards g :orig) {
                        if (g.getCardName().toLowerCase().contains(constraint.toString()))results.add(g);
                    }
                }
                oReturn.values = results;
            }
            return oReturn;
        }

@Override
    protected void publishResults(CharSequence constraint,FilterResults results) {
        items = (ArrayList<BaseOfCards>)results.values;
        notifyDataSetChanged();

    }
};

>使MainActivity实现SearchView.OnQueryTextListener并更改onTextTextChange方法:

@Override
public boolean onQueryTextChange(String newText) {
    if ( TextUtils.isEmpty ( newText ) ) {
        adapter.getFilter().filter("");
    } else {
        adapter.getFilter().filter(newText.toString());
    }
    return true;
}

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...