2017-10-28 49 views
0
import android.content.Context; 

import android.support.v7.widget.RecyclerView; 

import android.view.LayoutInflater; 

import android.view.View; 

import android.view.ViewGroup; 

import android.widget.Filter; 

import android.widget.Filterable; 

import android.widget.TextView; 



public class MyAdapter extends RecyclerView.Adapter<MyAdapter.myviewholder> 

implements Filterable 

{ 


    private Context context; 

    private User[] data; 


    public MyAdapter(Context context, User[] data) 
{ 
     this.context = context; 

     this.data = data; 


    } 

    @Override 

    public myviewholder onCreateViewHolder(ViewGroup parent, int viewType) 
{ 

     LayoutInflater Inflater = LayoutInflater.from(parent.getContext()); 

     View view = Inflater.inflate(R.layout.items, parent, false); 

     return new myviewholder(view); 

    } 

    @Override 

    public void onBindViewHolder(myviewholder holder, int position) { 



     final User user = data[position]; 

     holder.t1.setText(user.getName()); 

     holder.t2.setText(user.getNumber()); 



    } 

    @Override 
    public int getItemCount() { 

     return data.length; 

    } 


    @Override 
    public Filter getFilter() 

    { 
     return new Filter() { 

      @Override 

      protected FilterResults performFiltering(CharSequence charSequence) 
{ 

       String charString = charSequence.toString(); 


       if (charString.isEmpty()) { 


        data = data; 

       } else { 


        ArrayList<data> filteredList = new ArrayList<>(); 


        for (data androidVersion : mArrayList) { 


         if (data.getName().toLowerCase().contains(charString) || androidVersion.getNumber().toLowerCase().contains(charString)) 
{ 


          filteredList.add(data); 

         } 

        } 

        mFilteredList = filteredList; 

       } 


       FilterResults filterResults = new FilterResults(); 

       filterResults.values = mFilteredList; 

       return filterResults; 

      } 

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

       notifyDataSetChanged(); 

      } 

     }; 

    } 

    public class myviewholder extends RecyclerView.ViewHolder 

    { 

     TextView t1; 

     TextView t2; 


     public myviewholder(View itemview) { 

      super(itemview); 


      t1=(TextView) itemview.findViewById(R.id.t1); 

      t2=(TextView) itemview.findViewById(R.id.t2); 




     } 

    } 



} 
+0

请加descryption –

+0

使用[这](https://gist.github.com/pskink/cd3bbdd742b5b1905a790c76831b5d85)通用'Filterable'适配器作为基类 – pskink

回答

0

我已经完成了下面的操作。这段代码会帮助你。

在你的适配器,用于更新添加新功能列表

public void updateList(List<classHolder> list){ 
displayedList = list; 
notifyDataSetChanged(); } 

添加textWatcher搜索可以说你正在使用EDITTEXT作为搜索字段。

searchField.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

     // TODO Auto-generated method stub 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     // TODO Auto-generated method stub 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 

     // filter your list from your input 
     filter(s.toString()); 
     //you can use runnable postDelayed like 500 ms to delay search text 
    } 
}); 

void filter(String text){ 
List<classHolder> temp = new ArrayList(); 
for(classHolder d: displayedList){ 
     //or use .equal(text) with you want equal match 
     //use .toLowerCase() for better matches 
     if(d.getEnglish().contains(text)){ 
      temp.add(d); 
     } 
} 
//update recyclerview 
disp_adapter.updateList(temp); 
}