2017-06-02 73 views
0

目前我只能搜索一个字符串单词。例如,我需要搜索多个词,我键入“牛轧糖,甜甜圈”,他们告诉我这两个?我需要在代码中使用这个工作吗?Recycler查看多个搜索

DataAdapter.java

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> implements Filterable { 
private ArrayList<AndroidVersion> mArrayList; 
private ArrayList<AndroidVersion> mFilteredList; 

public DataAdapter(ArrayList<AndroidVersion> arrayList) { 
    mArrayList = arrayList; 
    mFilteredList = arrayList; 
} 

@Override 
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) { 

    viewHolder.tv_name.setText(mFilteredList.get(i).getName()); 
    viewHolder.tv_version.setText(mFilteredList.get(i).getVer()); 
    viewHolder.tv_api_level.setText(mFilteredList.get(i).getApi()); 
} 

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

@Override 
public Filter getFilter() { 

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

      String charString = charSequence.toString(); 

      if (charString.isEmpty()) { 

       mFilteredList = mArrayList; 
      } else { 

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

       for (AndroidVersion androidVersion : mArrayList) { 

        if (androidVersion.getApi().toLowerCase().contains(charString) || androidVersion.getName().toLowerCase().contains(charString) || androidVersion.getVer().toLowerCase().contains(charString)) { 

         filteredList.add(androidVersion); 
        } 
       } 

       mFilteredList = filteredList; 
      } 

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

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

public class ViewHolder extends RecyclerView.ViewHolder{ 
    private TextView tv_name,tv_version,tv_api_level; 
    public ViewHolder(View view) { 
     super(view); 

     tv_name = (TextView)view.findViewById(R.id.tv_name); 
     tv_version = (TextView)view.findViewById(R.id.tv_version); 
     tv_api_level = (TextView)view.findViewById(R.id.tv_api_level); 

    } 
} 

json recycler view

this is search but only for one word

+0

你可以从服务器端编程做在API中,你从数据库中取回数据。根据你的过滤词做搜索sql –

回答

0

你可以试试这个

if (charString.contains(",")) { 
    String searchChar[] = charString.split(","); 
    for (int i = 0; i < searchChar.length; i++) { 

    if (androidVersion.getApi().toLowerCase().contains(searchChar[i]) || androidVersion 
     .getName() 
     .toLowerCase().contains(searchChar[i]) || androidVersion.getVer().toLowerCase() 
     .contains(searchChar[i])) { 

     filteredList.add(androidVersion); 
    } 
    } 
} else { 
    if (androidVersion.getApi().toLowerCase().contains(charString) || androidVersion.getName() 
     .toLowerCase().contains(charString) || androidVersion.getVer().toLowerCase() 
     .contains(charString)) { 

    filteredList.add(androidVersion); 
    } 
} 

替换代码:

if (androidVersion.getApi().toLowerCase().contains(charString) || 
    androidVersion.getName().toLowerCase().contains(charString) || 
    androidVersion.getVer().toLowerCase().contains(charString)) { 

    filteredList.add(androidVersion); 
    } 
+0

这工作得很好,但是当我写3个属于同一张卡的单词时,我得到的卡显示3次 –

0

您需要添加一些预处理,以确定是否有多个值

@Override 
    protected FilterResults performFiltering(CharSequence charSequence) { 
     String splitter = ","; 
     final String[] multipleValues = charSequence.toString().split(splitter); 
     //your null check 
     List<AndroidVersions> filteredList = new ArrayList() 
     for (String value : multipleValues) { 
      filteredList.addAll(internalFilter(mArrayList, value)); 
     } 
     //the rest of your code 
    } 

    private List<AndroidVersions> internalFilter(ArrayList<AndroidVersions> listToFilter, String value) { 
     List<AndroidVersions> filteredList = new ArrayList() 
     for (AndroidVersion androidVersion : listToFilter) { 
      if (androidVersion.getApi().toLowerCase().contains(value) 
       || androidVersion.getName().toLowerCase().contains(value) 
       || androidVersion.getVer().toLowerCase().contains(value)) { 

       filteredList.add(androidVersion); 
      } 
     } 
     return filteredList; 
    } 

此代码也将工作仅1个值完全正常