Android FirebaseRecyclerAdapter-根据EditText值筛选数据

Android FirebaseRecyclerAdapter-根据EditText值筛选数据,android,firebase,android-recyclerview,Android,Firebase,Android Recyclerview,我正在使用Firebase制作类似社交网络的东西,我有一个自己无法处理的问题。我想使用FireBaseRecycler视图动态筛选数据。我有这样的经历: final Query queryRef = mUsersDatabase.orderByChild("name"); FirebaseRecyclerAdapter<Users, UsersActivity.UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecycle

我正在使用Firebase制作类似社交网络的东西,我有一个自己无法处理的问题。我想使用FireBaseRecycler视图动态筛选数据。我有这样的经历:

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中获取文本并按名称列出。我试过这样的方法:

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)

) 
但是,有了:

mUsersList.setAdapter(firebaseRecyclerAdapter);
container.addView(view);
return view;
当我放置两个第一通道(setAdapter和addView)时,应用程序崩溃,并且在编辑EditText时,我始终拥有返回视图。更重要的是,这似乎是非常愚蠢和可笑的选择,但事实上,我有大脑滞后。有人知道解决办法吗

试试这段代码

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) {

            }
        });
editText.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(CharSequence查询、int start、int before、int count){
query=query.toString().trim().toLowerCase();
最终ArrayList filteredList=新ArrayList();
final CharSequence finalQuery=查询;
新线程(newrunnable()){
@凌驾
公开募捐{
//清除过滤器列表
filteredList.clear();
//如果没有搜索值,则将所有原始列表项添加到筛选列表
if(TextUtils.isEmpty(finalQuery)){
filteredList.addAll(城市);
}否则{
//在原始列表中迭代并将其添加到筛选器列表。。。
用于(数据模型项:城市){
if(item.getCity_name().toLowerCase().contains(finalQuery.toString().toLowerCase())
) {
//添加匹配项
filteredList.add(项目);
}
}
}
//在UI线程上设置
((活动)上下文).runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
//通知列表数据集已更改。。。
适配器=新的SearchCityAdapter(SearchCityClass.this,filteredList);
recyclerSearchCity.setAdapter(适配器);
}
});
}
}).start();
}
@凌驾
公共无效后文本已更改(可编辑){
}
});

事实上,我是自己处理的,但这个解决方案让我大开眼界。谢谢