Android FirebaseRecyclerAdapter-根据EditText值筛选数据
我正在使用Firebase制作类似社交网络的东西,我有一个自己无法处理的问题。我想使用FireBaseRecycler视图动态筛选数据。我有这样的经历: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
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();
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
事实上,我是自己处理的,但这个解决方案让我大开眼界。谢谢