2017-02-05 32 views
0

我有一個FirebaseRecyclerAdapter。我想編號項目。 所以,如果我有5個項目,像Android FirebaseRecyclerAdapter刷新所有項目

1 - d 
2 - w 
3 - c 
4 - s 
5 - z 

當我添加一個新的項目,以第一名比:(我需要做)

1 - g 
2 - d 
3 - w 
4 - c 
5 - s 
6 - z 

所以我想添加一個新的職位數當一個新項目到達所有項目。所以我想刷新所有位置。 我該怎麼做?

// Set up Layout Manager, reverse layout 
     mManager = new LinearLayoutManager(getActivity()); 
     mManager.setReverseLayout(true); 
     mManager.setStackFromEnd(true); 
     mRecycler.setLayoutManager(mManager); 

     // Set up FirebaseRecyclerAdapter with the Query 
     Query postsQuery = getQuery(mDatabase); 
     mAdapter = new FirebaseRecyclerAdapter<Test, PostViewHolder>(Test.class, R.layout.item_record, PostViewHolder.class, postsQuery) { 
      @Override 
      protected void populateViewHolder(final PostViewHolder viewHolder, final Test model, final int position) { 
       viewHolder.bindToPost(model); 
      } 

     }; 
     mRecycler.setAdapter(mAdapter); 

public class PostViewHolder extends RecyclerView.ViewHolder { 

    public TextView titleView; 

    public PostViewHolder(View itemView) { 
     super(itemView); 
     titleView = (TextView) itemView.findViewById(R.id.tview); 
    } 

    public void bindToPost(Test item) { 
     titleView.setText(String.valueOf(getLayoutPosition())+". "+item.name); 
    } 
} 

當新項目到達時,比populateViewHolder運行1次。但舊物品不刷新。我如何刷新所有?

getLayoutPosition()做到這一點:

5 - g 
4 - d 
3 - w 
2 - c 
1 - s 
0 - z 

我怎麼能刷新所有項目,當一個新創造出來的?

回答

0

你不顯示您的查詢。它需要定義一個排序順序,以便在新項目到達或更改時,查詢可以自動反映這些更改。

由於您想對某種位置索引進行排序,因此您還需要爲數據添加一個position字段,以便查詢可以使用order using that child key

底線是這樣的:如果您的Query定義了一個排序,並且子節點的排序隨着時間的推移而變化,FirebaseRecyclerAdapter將自動反映這些更改。你只需要確保數據庫中的數據是正確的。

如果您無法創建正確排序數據的查詢,則應該不使用FirebaseRecyclerAdapter,而是使用偵聽器讀取數據,然後手動對代碼中的數據進行排序,然後將其發送到自定義適配器在RecyclerView中顯示。

1

獲取適配器刷新其內容,通知它的數據集已經改變:

mAdapter.notifyDataSetChanged();