2017-10-10 315 views
0

我使用Firebase製作了類似社交網絡的內容,並且我遇到了一個問題,我無法處理自己。我想用FireBaseRecycler View動態過濾數據。有這樣的事情我真的:FirebaseRecyclerAdapter - 根據EditText值篩選數據

App screen

所以,我想通過名稱從的EditText和列表gettext的。我想是這樣的:

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) 

) 

而且經過串從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(); 
     } 
    }); 

但是有:

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

當我把兩個第一車道(setAdapter和addView)應用程序崩潰和在我編輯EditText時,我總是有返回視圖。還有什麼似乎是非常愚蠢和嘲諷的選擇,但實際上我腦子滯後。有人知道一個解決方案?

回答

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

其實我自己來處理,但是,這個解決方案已經使我睜開眼睛。謝謝! –