2017-09-11 6 views
0

私はこのアプリケーションをMySqlデータベースから取得し、それをrecyclerViewに解析します。私はeditTextを持っていて、私は入力中にrecyclerView項目をフィルタリングできるようにしたい。ここでEditTextでRecyclerViewをフィルタリングする

は私のMainActivity(SearchAvtivity)です:

public class MyAdapter extends RecyclerView.Adapter<MyHolder> { 
 

 
    Context c; 
 
    ArrayList<SpaceCraft> spaceCrafts; 
 
    List<MyHolder> displayedList; 
 

 
    public MyAdapter(Context c, ArrayList<SpaceCraft> spaceCrafts) { 
 
     this.c = c; 
 
     this.spaceCrafts = spaceCrafts; 
 
    } 
 

 
    @Override 
 
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_adapter_vertical,parent,false); 
 
     return new MyHolder(v); 
 
    } 
 

 
    @Override 
 
    public void onBindViewHolder(MyHolder holder, int position) { 
 
     holder.nameTv.setText(spaceCrafts.get(position).getName()); 
 
     holder.addressTv.setText(spaceCrafts.get(position).getAddress()); 
 
     holder.phoneTv.setText(spaceCrafts.get(position).getPhone()); 
 
     holder.emailTv.setText(spaceCrafts.get(position).getEmail()); 
 

 
    } 
 

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

イド:

public class SearchActivity extends AppCompatActivity { 
 
    private static final String TAG = "Search Activity"; 
 
    private Context mContext = SearchActivity.this; 
 
    private static final int ACTIVITY_NUM = 1; 
 

 
    String urlAddress = "myDatabaseAddressGoesHere.PHP"; 
 

 

 
    @Override 
 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_search); 
 
     Log.d(TAG, "onCreate: started"); 
 
     setupBottomNavigationView(); 
 
     final RecyclerView rv = (RecyclerView) findViewById(R.id.SearchRv); 
 
     rv.setLayoutManager(new LinearLayoutManager(this)); 
 
     rv.setItemAnimator(new DefaultItemAnimator()); 
 
     Downloader dl = new Downloader(SearchActivity.this,urlAddress,rv); 
 
     dl.execute(); 
 
    } 
 
      
 
      
 

 
    /** 
 
    * Setup Bottom Navigation View 
 
    */ 
 

 
    private void setupBottomNavigationView(){ 
 
     Log.d(TAG, "setupBottomNavigationView: Setting up Bottom Navigation View"); 
 
     BottomNavigationViewEx bottomNavigationViewEx = (BottomNavigationViewEx)findViewById(R.id.bottom_nav_bar); 
 
     BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationViewEx); 
 
     BottomNavigationViewHelper.enableNavigation(mContext,bottomNavigationViewEx); 
 
     Menu menu = bottomNavigationViewEx.getMenu(); 
 
     MenuItem menuItem = menu.getItem(ACTIVITY_NUM); 
 
     menuItem.setChecked(true); 
 

 
    } 
 
}

、ここではMyAdapterですあなたがvlassesを見なければならないかどうかわからない:ダウンローダー、パーサー、コネクターまたはホルダー。私は教えてください。

+0

[Android - 検索フィルターをRecyclerViewに実装する](https://stackoverflow.com/questions/40754174/android-implementing-search-filter-to-a-recyclerview) – Raghavendra

答えて

-1

あなたはeditTextのTextWatcherでそれを行うことができ、その中にあなたのリストをフィルタリングすることができます。

例:あなたはあなたのリスト内のすべてのデータを削除し、テキストフィルタ

+0

このテキストを追加する必要がありますウォッチャー? – abe

+0

これはあなたのeditText((EditText)findViewById(R.id.your_edit_text))であり、addTextChangedListener()にこのメソッドを追加すると、引数のテキストウォッチャーを取ります。私はあなたのeditTextがあなたのアクティビティ内にあるので、このコードをアクティビティ – Vodet

+0

に入れたと思います。最後の部分の "yourList.add(" String ")"エラーが表示されます:add(***** ArrayList内の********* SpaceCract)を(java.lang.string)に適用することはできません – abe

0

に対応するデータのみを追加するこの例では

((EditText) findViewById(R.id.your_edit_text)).addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 

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

    @Override 
    public void afterTextChanged(Editable s) { 
     String text = s.toString(); 
     ArrayList<String> yourCopyList = new ArrayList<>(yourList) 
     yourList.clear(); 
     if (text.isEmpty()) { 
      addAllYourDataToList(); 
     } else { 
      text = text.toLowerCase(); 
      for (int i = 0; i<yourCopyList.size(); i++) { 
       // Adapt the if for your usage 
       if (yourCopyList.get(i).getName().toLowerCase().contains(text)) { 
        yourList.add("the string"); 
       } 
      } 
     } 
     adapter.notifyDataSetChanged(); 
    } 
}); 

あなたはRecyclerViewについてはTextWatcher()を使用する必要があります。

関連する問題