2017-03-14 413 views
0

我剛開始學習Firebase和Android。我想在列表視圖中創建一個搜索視圖顯示數據並過濾來自Firebase的數據(例如Instagram搜索部分)我已經閱讀了一些文檔和其他一些問題,但我仍然不知道如何執行並啓動它。任何人都可以給我一些建議嗎?我需要做什麼?我應該從哪裏開始?我應該使用Firebaseui嗎?有什麼我能看的例子嗎?Firebase Android搜索查看

+0

是ü可以加載數據的特定類的列表,然後在你的適配器添加過濾器()函數!並在搜索視圖方法中調用它。 –

+0

有沒有任何例子? – kings077712

回答

0

您的代碼顯示請按照下列步驟操作:

  1. 檢索一個數組或列表從數據庫中存儲數據。
  2. 將自定義列表適配器設置爲實現Filterable的列表。
  3. 觸發時,用戶類型在搜索框中
下面

是在活動中獲取用戶的列表和設置過濾器的例子過濾器:

  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); 
     } 
    } 

接下來,你應該看看了如何使列表適配器實現可過濾。 祝你好運!

0

創建新方法「firebaseUserSearch」 複製您的RecyclerView適配器並粘貼到裏面。使用你的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) { 

    ....