Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Android搜索视图_Android_Firebase_Firebaseui - Fatal编程技术网

Firebase Android搜索视图

Firebase Android搜索视图,android,firebase,firebaseui,Android,Firebase,Firebaseui,我刚开始学习Firebase和Android。我想创建一个搜索视图,在listview中显示数据,并从Firebase中筛选数据。(例如Instagram搜索部分)我在SO中阅读了一些文档和一些其他问题,但我仍然不知道如何操作和启动它。谁能给我一些建议吗?我需要做什么?我应该从哪里开始?我应该使用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对其进行筛选。