2017-10-10 8 views
0

Firebaseを使用してソーシャルネットワークのようなものを作っています。私はFireBaseRecycler Viewを使って動的にデータをフィルタリングしたい。このようなI`mた何か:FirebaseRecyclerAdapter - EditTextの値に応じてデータをフィルタリングする

App screen

だから、私は名前でのEditTextと、リストからgettextをしたいです。何でのEditText

editText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {} 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {} 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      string = editText.getText().toString(); 
     } 
    }); 

から

final Query queryRef = mUsersDatabase.orderByChild("name"); 
FirebaseRecyclerAdapter<Users, UsersActivity.UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UsersActivity.UsersViewHolder>(

     Users.class, 
     R.layout.users_single_layout, 
     UsersActivity.UsersViewHolder.class, 
     mUsersDatabase.orderByChild("Users").equalTo(string) 

) 

そして渡す文字列:しかし、私はこのような何かをしようとした私は2つの最初のレーン(setAdapterとaddView)アプリケーションのクラッシュを置くとき

mUsersList.setAdapter(firebaseRecyclerAdapter); 
container.addView(view); 
return view; 

と私はEditTextを編集するたびにリターンビューを持っています。それは何よりも、あまりにも愚かでridicoulousな選択肢だと思われますが、実際に私は脳の遅れです。誰かが解決策を知っていますか?

答えて

0

は実際に私が自分でそれを処理しますが、このソリューションは、私の目が開いていた、このコード

editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence query, int start, int before, int count) { 

       query = query.toString().trim().toLowerCase(); 

       final ArrayList<DataModel> filteredList = new ArrayList<>(); 


       final CharSequence finalQuery = query; 
       new Thread(new Runnable() { 
        @Override 
        public void run() { 

         // Clear the filter list 
         filteredList.clear(); 

         // If there is no search value, then add all original list items to filter list 
         if (TextUtils.isEmpty(finalQuery)) { 

          filteredList.addAll(cities); 

         } else { 
          // Iterate in the original List and add it to filter list... 
          for (DataModel item : cities) { 
           if (item.getCity_name().toLowerCase().contains(finalQuery.toString().toLowerCase()) 
             ) { 
            // Adding Matched items 
            filteredList.add(item); 
           } 
          } 
         } 

         // Set on UI Thread 
         ((Activity) context).runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 

           // Notify the List that the DataSet has changed... 
           adapter = new SearchCityAdapter(SearchCityClass.this, filteredList); 
           recyclerSearchCity.setAdapter(adapter); 

          } 
         }); 

        } 
       }).start(); 


      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 
+0

を試してみてください。ありがとう! –

関連する問題