Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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中搜索特定单词_Android_Search_Filter_Android Recyclerview - Fatal编程技术网

Android 使用适配器在RecyclerView中搜索特定单词

Android 使用适配器在RecyclerView中搜索特定单词,android,search,filter,android-recyclerview,Android,Search,Filter,Android Recyclerview,我有一个带有工具栏的活动,我正在调用由recyclerview组成的片段,在工具栏中有搜索选项,当我使用文本搜索时,recyclerview应该得到过滤。请帮帮我 这是我的密码 在活动中,我有工具栏- public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); final MenuItem item = menu.findItem(R.i

我有一个带有工具栏的活动,我正在调用由recyclerview组成的片段,在工具栏中有搜索选项,当我使用文本搜索时,recyclerview应该得到过滤。请帮帮我

这是我的密码 在活动中,我有工具栏-

public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        final MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) 
        MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(new 
        SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                System.out.println("Clicked...");
                search = newText;
                return false;
            }
      });
      System.out.println("Item : "+item);
      return true;
  }
在片段中,我有recyclerview,它在其中设置适配器

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
  mRecyclerView = (RecyclerView)view.findViewById(R.id.recyclerview);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(mLayoutManager);
    mAdapter = new MyRecyclerViewAdapter(results);
}
在MyRecycleServiceAdapter中-

    public class MyRecyclerViewAdapter extends RecyclerView
        .Adapter<MyRecyclerViewAdapter
        .DataObjectHolder> {
            private static String LOG_TAG = "MyRecyclerViewAdapter";
            public static ArrayList<DataObject> mDataset;
            public static ArrayList<DataObject> mFilteredList;
            private static MyClickListener myClickListener;
            View view;

            public class DataObjectHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener, Filterable {
                 ImageView img;
                 TextView label;
                 ImageView img_navi;
                 TextView txt_add;
                 TextView txt_id;
                 TextView txt_desc;
                 ImageView img1;
                 TextView name;
                 TextView title_desc;
                 CircularImageView profile_img;

        public DataObjectHolder(View itemView) {
            super(itemView);
            img = (ImageView)itemView.findViewById(R.id.img);
            label = (TextView) itemView.findViewById(R.id.txt_issues);
            img_navi = (ImageView) itemView.findViewById(R.id.img_navi);
            txt_add = (TextView)itemView.findViewById(R.id.txt_add);
            txt_id = (TextView)itemView.findViewById(R.id.txt_id);
            txt_desc = (TextView)itemView.findViewById(R.id.txt_desc);
            img1 = (ImageView) itemView.findViewById(R.id.img1);
            name = (TextView)itemView.findViewById(R.id.txt_name);
            profile_img = (CircularImageView) 
            itemView.findViewById(R.id.img_pic);
            title_desc = (TextView)itemView.findViewById(R.id.title_desc);
            Log.i(LOG_TAG, "Adding Listener");
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
        }

        @Override
        public Filter getFilter() {

            return new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence
                charSequence) {

                    String charString = charSequence.toString();

                    if (charString.isEmpty()) {
                        mFilteredList = mDataset;
                    } else {
                        ArrayList<DataObject> filteredList = new ArrayList<>();
                        for (DataObject dataObject : mDataset) {
                            if (dataObject.getmText1().toLowerCase().contains(charString) || dataObject.getmText2().toLowerCase().contains(charString) || dataObject.getmText3().toLowerCase().contains(charString) || dataObject.getmText4().toLowerCase().contains(charString) || dataObject.getmText5().toLowerCase().contains(charString)|| dataObject.getmText6().toLowerCase().contains(charString)) {

                                filteredList.add(dataObject);
                            }
                        }

                        mFilteredList = filteredList;
                    }

                    FilterResults filterResults = new FilterResults();
                    filterResults.values = mFilteredList;
                    return filterResults;
                }

                @Override
                protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                    mFilteredList = (ArrayList<DataObject>) filterResults.values;
                    notifyDataSetChanged();
                }
            };
        }
    }

    public void setOnItemClickListener(MyClickListener myClickListener) {
        this.myClickListener = myClickListener;
    }

    public MyRecyclerViewAdapter(ArrayList<DataObject> myDataset) {
        mDataset = myDataset;
        mFilteredList = myDataset;
    }

    @Override
    public DataObjectHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
        if(MyComplaintsFragment.my_complaints == true){
            view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.card_view_row1, parent, false);
        }
        else {
            view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.card_view_row, parent, false);
        }
        DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
        return dataObjectHolder;
    }

    @Override
    public void onBindViewHolder(DataObjectHolder holder, int position) {
        holder.img.setImageResource(R.drawable.play);
        holder.label.setText(mDataset.get(position).getmText6());
        holder.img_navi.setImageResource(R.drawable.navigation);
        holder.txt_add.setText(mDataset.get(position).getmText2());
        holder.txt_id.setText(mDataset.get(position).getmText3());
        holder.txt_desc.setText(mDataset.get(position).getmText4());
        holder.name.setText(mDataset.get(position).getmText5());
        holder.title_desc.setText(mDataset.get(position).getmText1());
        holder.img1.setImageResource(R.drawable.i1);
    }

    public void addItem(DataObject dataObj, int index) {
        mDataset.add(index, dataObj);
        notifyItemInserted(index);
    }

    public void deleteItem(int index) {
        mDataset.remove(index);
        notifyItemRemoved(index);
    }

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

    public interface MyClickListener {
        public void onItemClick(int position, View v);
    }
}
公共类MyRecycleServiceAdapter扩展了RecyclerView
.适配器{
私有静态字符串LOG_TAG=“MyRecycleServiceAdapter”;
公共静态ArrayList mDataset;
公共静态数组列表mFilteredList;
私有静态MyClickListener MyClickListener;
视图;
公共类DataObjectHolder扩展了RecyclerView.ViewHolder
实现View.OnClickListener,可筛选{
图像视图img;
文本视图标签;
ImageView img_navi;
文本视图txt_添加;
TextView txt_id;
TextView txt_desc;
ImageView img1;
文本视图名称;
文本视图标题描述;
圆形视图剖面图;
公共数据对象持有者(视图项视图){
超级(项目视图);
img=(ImageView)itemView.findViewById(R.id.img);
label=(TextView)itemView.findViewById(R.id.txt_问题);
img_navi=(ImageView)itemView.findviewbyd(R.id.img_navi);
txt_add=(TextView)itemView.findViewById(R.id.txt_add);
txt_id=(TextView)itemView.findViewById(R.id.txt_id);
txt_desc=(TextView)itemView.findViewById(R.id.txt_desc);
img1=(ImageView)itemView.findViewById(R.id.img1);
name=(TextView)itemView.findViewById(R.id.txt\u name);
纵断面图_img=(CircularImageView)
itemView.findViewById(R.id.img_pic);
title_desc=(TextView)itemView.findViewById(R.id.title_desc);
i(Log_标记,“添加侦听器”);
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
}
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护的过滤器结果执行过滤(CharSequence
字符序列){
String charString=charSequence.toString();
if(charString.isEmpty()){
mFilteredList=mDataset;
}否则{
ArrayList filteredList=新建ArrayList();
用于(数据对象数据对象:mDataset){
如果(dataObject.getmText1().toLowerCase().contains(charString)| dataObject.getmText2().toLowerCase().contains(charString)| dataObject.getmText3().toLowerCase().contains(charString)| dataObject.getmText4().toLowerCase().contains(charString)| dataObject.getmText5().toLowerCase().contains(charString)| dataObject.getmText6().toLowerCase().contains(字符串)){
添加(数据对象);
}
}
mFilteredList=filteredList;
}
FilterResults FilterResults=新的FilterResults();
filterResults.values=mFilteredList;
返回过滤器结果;
}
@凌驾
受保护的无效发布结果(CharSequence CharSequence、FilterResults FilterResults){
mFilteredList=(ArrayList)filterResults.values;
notifyDataSetChanged();
}
};
}
}
public void setOnItemClickListener(MyClickListener MyClickListener){
this.myClickListener=myClickListener;
}
公共MyRecycleServiceAdapter(ArrayList myDataset){
mDataset=myDataset;
mFilteredList=myDataset;
}
@凌驾
public DataObjectHolder onCreateViewHolder(视图组父级,
int视图类型){
if(MyComplaintsFragment.my_complaints==true){
view=LayoutInflater.from(parent.getContext())
.充气(R.layout.card\u view\u row1,父级,假);
}
否则{
view=LayoutInflater.from(parent.getContext())
.充气(R.layout.card\u view\u row,父级,错误);
}
DataObjectHolder DataObjectHolder=新的DataObjectHolder(视图);
返回数据对象持有者;
}
@凌驾
public void onBindViewHolder(DataObjectHolder,int位置){
holder.img.setImageResource(R.drawable.play);
holder.label.setText(mDataset.get(position.getmText6());
holder.img_navi.setImageResource(R.drawable.navigation);
holder.txt_add.setText(mDataset.get(position.getmText2());
holder.txt_id.setText(mDataset.get(position.getmText3());
holder.txt_desc.setText(mDataset.get(position.getmText4());
holder.name.setText(mDataset.get(position.getmText5());
holder.title_desc.setText(mDataset.get(position.getmText1());
holder.img1.setImageResource(R.drawable.i1);
}
public void addItem(DataObject dataObj,int index){
添加(索引,dataObj);
插入的项目(索引);
}
公共void deleteItem(int索引){
mDataset.remove(索引);
删除的项目(索引);
}
@凌驾
public int getItemCount(){
返回mDataset.size();
}
公共接口MyClickListener{
公共位置(内部位置,视图v);
}
}
如何从适配器使用getFilter


谢谢您

您主要关心的是如何与
fargment
沟通
搜索视图
?。可以进行通信
sear