1

我有這樣的場景,在我的應用我試圖查詢子節點,並將它傳遞名單上recyclerview適配器檢索火力數據庫值只有一次,來了問題,當我滾動回收查看項目,如果有人已經插入帖子,我的recyclerview再次來到第一個發佈項目,我也使用viewpager與三個片段,無論我的片段我回滾到第一個片段如果有人插入帖子如何解決這個問題。 我已經通過下面提到的方式實現了這一點。怎麼不聽childvalues即使他們已經改變

一種方式即時通訊思想是我想我會不聽childevent變化相反,我將查詢結果後來填充recyclerview不聽孩子的事件,這樣的方式一切國家,因爲它是,我不知道在火力點怎麼辦你檢索值沒有實現監聽器我試過singleValueEventListener的方式仍然是行爲是回滾到第一個項目或第一個片段

指導我通過解決方案如何擺脫這種行爲。

Query query= databasePostsReference.orderByChild("timestamp"); 

     query.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       List<UserPostPOJO> listposts = new ArrayList<UserPostPOJO>(); 
       for(DataSnapshot snapshot : dataSnapshot.getChildren()){ 
        Log.d(TAG, "onDataChange: entered list adding"); 
        UserPostPOJO post = 
        snapshot.getValue(UserPostPOJO.class); 
        listposts.add(0,post); 
       } 
       if(listposts.isEmpty()){ 
        empty.setVisibility(View.VISIBLE); 
        recyclerView.setVisibility(View.GONE); 
       } 
       else 
       { 
        empty.setVisibility(View.GONE); 
        recyclerView.setVisibility(View.VISIBLE); 
        makelist(listposts); 
       } 


      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 




private void makelist(List<UserPostPOJO> listposts) { 
     list = listposts; 
     Log.d(TAG,"size is "+ list.size()+""); 

     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(new 
     LinearLayoutManager(getActivity())); 
     CustomRecyclerViewAdapter adapter = new 
     CustomRecyclerViewAdapter(getActivity(), list,"recentfragment"); 
     recyclerView.setAdapter(adapter); 


    } 

回答

1

有一個名爲removeEventListener(),您可以調用刪除特定event listener方法。您從數據庫中獲取數據並調用此方法。因此,爲了使這項工作,請使用如下代碼:

databaseReference.removeEventListener(valueEventListener); 

在這databaseReference是你intially把聽者的參考。

欲瞭解更多詳情,請閱讀offcial doc

希望它有幫助。

+1

WAW我完全忘了這一點生病閱讀並嘗試實現感謝這個 –

+1

不客氣。保持我的發佈。 –

+0

嗨亞歷克斯我試圖刪除聽衆,但仍然行爲是相同的,你可以指導我通過這個。 什麼我已經加入,我已經取出的直列收聽者做出的監聽器對象和onDataChange方法 query.removeEventListener(受聽者)內後makelist方法onDataChange方法中添加下列行; –

0

火力地堡具有FirebaseRecyclerAdapter其可以被設置爲一個RecyclerView。它需要一個DatabaseReferenceQuery對象並處理數據庫和視圖之間的所有數據同步。

相關問題