我只是开始学习Firebase和Android。我想在listView中创建一个搜索视图显示数据,并从Firebase中进行过滤数据。(例如Instagram搜索部分)我已经阅读了一些文档和其他问题,但我仍然不明白该如何做并启动它。谁能给我一些建议?我需要做什么?我应该从哪里开始?我应该使用firebaseui吗?有什么例子可以看吗?
您的代码显示以下步骤:
- 从数据库中检索数据并存储在数组或列表中。
- 将自定义列表适配器设置为可实现的可过滤的列表。
- 当用户在搜索框中键入 时触发过滤器
以下是检索用户列表并在活动中设置过滤器的示例:
private List<User> usersList;
private MyListAdapter adapter;
private Listview listview;
private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
usersList = new ArrayList<>();
for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
usersList.add(eventSnapshot.getValue(User.class);
}
adapter = new MyListAdapter(context, usersList);
listview = (Listview) findViewById(R.id.mylistview);
listview.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
searchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FilterNow();
}
});
}
private void FilterNow() {
String text = editText.getText().toString().toLowerCase().trim();
if (TextUtils.isEmpty(editText.getText())){
Toast.makeText(getContext(),"searchbox is empty!", Toast.LENGTH_SHORT).show();
}else {
adapter.getFilter().filter(text);
friends.setAdapter(adapter);
}
}
接下来,您应该查找如何使列表适配器实现可过滤。祝你好运!
创建新方法" firebaseusersearch"复制您的回收库适配器并在内部粘贴。使用您的databasEreference过滤。
我的FB结构是:
BLABLA:
Bars:
01:
BarName: "Best bar"
02:
BarName: "The Worst bar"
和代码在这里:
....
databaseReference = FirebaseDatabase.getInstance().getReference ("Bars");
.....
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String searchText) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onQueryTextChange(String searchText) {
searchText = searchView.getQuery().toString();
firebaseUserSearch (searchText);
return true;
}
});
return true;
}
private void firebaseUserSearch (final String searchText) {
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter <Bar, ViewHolder>(
Bar.class,
R.layout.custom_row,
ViewHolder.class,
databaseReference.orderByChild("barName").startAt(searchText.toUpperCase()).endAt(searchText + "uf8ff"))
{
@Override
protected void populateViewHolder(ViewHolder viewHolder, Bar model, final int position) {
....