2017-10-10 312 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

其实我自己来处理,但是,这个解决方案已经使我睁开眼睛。谢谢! –