2016-05-27 6 views
0

をバックスペースを押しながらキーは結果がコールonQueryTextChange私は私のバックスペースを使用して、私のクエリのテキストを削除する場合(削除)、(削除)私の検索ビューでキー

は、私が検索ここで見るよりよく理解するために、以下の画像を参照してください返さないしまいました私のアダプタのオブジェクトがあり、その結果を取得していますtest1 ..ため

はここ

image1

大丈夫私は1つのより多くの時間を問い合わせましたが、私はどれも結構ですので、結果として何も得ていないのです。この名前を持つオブジェクトなかったです

enter image description here

今ここに私のonQueryTextChangeを私はバックスペースを押す(キーを削除)し、今、私のクエリテキストがtestであると私は私のアダプタでこの名前のオブジェクトを持っていますが、リターン 内の任意のものを得ていないのですenter image description here

クエリのテキストを削除するときに呼び出されています。どのようにこれを修正できますか?どんな手掛かり ??

コード:

Search_View.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
       @Override 
      public boolean onQueryTextSubmit(String Text) { 

       return false; 
      } 
       @Override 
      public boolean onQueryTextChange(String newText) { 
       if (newText.length() == 0) { 
        notesAdapter = new NotesAdapter(getActivity(), getData()); 
        recyclerView.setAdapter(notesAdapter); 
       } 
       if (notesAdapter != null) { 
        notesAdapter.getFilter().filter(newText); 
       } 
       return true; 
      } 
     }); 

私notesAdapterのフィルタリング部分:

private static class UserFilter extends Filter { 

    private final NotesAdapter adapter; 

    private final List<Information> originalList; 

    private final List<Information> filteredList; 

    private UserFilter(NotesAdapter adapter, List<Information> originalList) { 
     super(); 
     this.adapter = adapter; 
     this.originalList = new ArrayList<>(originalList); 
     this.filteredList = new ArrayList<>(); 
    } 

    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     filteredList.clear(); 
     final FilterResults results = new FilterResults(); 

     if (constraint == null || constraint.length() == 0) { 
      filteredList.addAll(originalList); 



     } else { 
      final String filterPattern = constraint.toString().toLowerCase().trim(); 


      for (final Information user : originalList) { 




        if ((user.title != null && user.title.toLowerCase().contains(filterPattern)) ||(user.address != null &&(user.address.toLowerCase().contains(filterPattern))) || 
          (user.postType != null && (user.postType.toLowerCase().contains(filterPattern)))|| (user.publisher != null&& (user.publisher.toLowerCase().contains(filterPattern))) 
          ) 

        { 
         filteredList.add(user); 

        } 

      } 
     } 
     results.values = filteredList; 
     results.count = filteredList.size(); 
     return results; 
    } 


    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     adapter.filteredUserList.clear(); 
     if ((ArrayList<Information>) results.values != null) { 

      adapter.filteredUserList.addAll((ArrayList<Information>) results.values); 
     } 
     adapter.notifyDataSetChanged(); 

    } } 
+0

'「私のonQueryTextChangeが呼び出されていないように思えます... "と思われる?あなたはそれを確認しませんでしたか? – pskink

+0

@pskinkええ、それはちょうどそれを確認した –

+0

またあなたのコードを置く – Stallion

答えて

0

私は検索機能を適用するために私のアダプタ内の一つの方法を作成しました。ここで

は、私がやったきたものです。..

CustomAdaperteあなたの活動インサイド

//Original list to be used for adapter 
private List<CustomerPaid> customerList; 
//Same list used for search 
private List<CustomerPaid> tempCustomerListForSearch; 

public CustomAdapter(List<CustomerPaid> customerList) { 
     this.customerList = customerList; 
     tempCustomerListForSearch = new ArrayList<>(); 
     tempCustomerListForSearch.addAll(customerList); 
} 

/** 
* Filters the data stored in list 
* @param textSearch 
*/ 
public void filter(String textSearch){ 
    textSearch = textSearch.toLowerCase(Locale.getDefault()); 

    customerList.clear(); 

    if (textSearch.length() == 0) { 

     customerList.addAll(tempCustomerListForSearch); 
    } else { 

     for (CustomerPaid customerPaid : tempCustomerListForSearch) { 
      if (customerPaid.getName().toLowerCase(Locale.getDefault()).contains(textSearch)) 
       customerList.add(customerPaid); 
     } 
    } 
    notifyDataSetChanged(); 
} 

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

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
       customAdapter.filter(newText); 
      return false; 
     } 
    }); 
関連する問題