Firebase Android搜索视图
我刚开始学习Firebase和Android。我想创建一个搜索视图,在listview中显示数据,并从Firebase中筛选数据。(例如Instagram搜索部分)我在SO中阅读了一些文档和一些其他问题,但我仍然不知道如何操作和启动它。谁能给我一些建议吗?我需要做什么?我应该从哪里开始?我应该使用Firebaseui吗?有什么例子我可以看一下吗 您的代码显示遵循以下步骤:Firebase Android搜索视图,android,firebase,firebaseui,Android,Firebase,Firebaseui,我刚开始学习Firebase和Android。我想创建一个搜索视图,在listview中显示数据,并从Firebase中筛选数据。(例如Instagram搜索部分)我在SO中阅读了一些文档和一些其他问题,但我仍然不知道如何操作和启动它。谁能给我一些建议吗?我需要做什么?我应该从哪里开始?我应该使用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);
}
}
私有列表用户列表;
专用MyListAdapter适配器;
私有列表视图列表视图;
私有数据库参考数据库;
mDatabase=FirebaseDatabase.getInstance().getReference();
mDatabase.child(“用户”).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
usersList=newarraylist();
对于(DataSnapshot eventSnapshot:DataSnapshot.getChildren()){
usersList.add(eventSnapshot.getValue(User.class));
}
适配器=新的MyListAdapter(上下文,用户列表);
listview=(listview)findViewById(R.id.mylistview);
setAdapter(适配器);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
searchButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
FilterNow();
}
});
}
私有空筛选器now(){
String text=editText.getText().toString().toLowerCase().trim();
if(TextUtils.isEmpty(editText.getText())){
Toast.makeText(getContext(),“搜索框为空!”,Toast.LENGTH\u SHORT.show();
}否则{
adapter.getFilter().filter(文本);
setAdapter(适配器);
}
}
接下来,您应该查看如何使列表适配器实现可过滤。
祝您好运!您的代码将按照以下步骤显示:
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);
}
}
私有列表用户列表;
专用MyListAdapter适配器;
私有列表视图列表视图;
私有数据库参考数据库;
mDatabase=FirebaseDatabase.getInstance().getReference();
mDatabase.child(“用户”).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
usersList=newarraylist();
对于(DataSnapshot eventSnapshot:DataSnapshot.getChildren()){
usersList.add(eventSnapshot.getValue(User.class));
}
适配器=新的MyListAdapter(上下文,用户列表);
listview=(listview)findViewById(R.id.mylistview);
setAdapter(适配器);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
searchButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
FilterNow();
}
});
}
私有空筛选器now(){
String text=editText.getText().toString().toLowerCase().trim();
if(TextUtils.isEmpty(editText.getText())){
Toast.makeText(getContext(),“搜索框为空!”,Toast.LENGTH\u SHORT.show();
}否则{
adapter.getFilter().filter(文本);
setAdapter(适配器);
}
}
接下来,您应该查看如何使列表适配器实现可过滤。
祝你好运!创建新方法“firebaseUserSearch”
复制您的RecyclerView适配器并粘贴到其中。使用databaseReference对其进行筛选
我的结构是:
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) {
....
。。。。
databaseReference=FirebaseDatabase.getInstance().getReference(“条”);
.....
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串搜索文本){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔值onQueryTextChange(字符串搜索文本){
searchText=searchView.getQuery().toString();
firebaseUserSearch(searchText);
返回true;
}
});
返回true;
}
私有void firebaseUserSearch(最终字符串搜索文本){
firebaseRecyclerAdapter=新的firebaseRecyclerAdapter(
酒吧,
R.layout.custom_行,
ViewHolder.class,
databaseReference.orderByChild(“barName”).startAt(searchText.toUpperCase()).endAt(searchText+“\uf8ff”))
{
@凌驾
受保护的void populateViewHolder(ViewHolder ViewHolder、条形图模型、最终int位置){
....
创建新方法“firebaseUserSearch”
复制您的RecyclerView适配器并粘贴到其中。使用databaseReference对其进行筛选。