2017-02-05 8 views
0

私はFirebaseRecyclerAdapterを持っています。アイテムに番号を付ける。 だから私はよりも最初の場所に新しい項目を追加するとき、私はAndroid FirebaseRecyclerAdapterすべてのアイテムをリフレッシュ

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

などの5項目を、持っている場合:(私はそれを行う必要があります)

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()はそれを行う:1、新しい作成したとき、私は、すべてのアイテムを更新するにはどうすればよい

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

答えて

0

あなたのクエリを示していません。新しい項目が到着したり変更されたりすると、クエリは自動的にそれらの変更を反映できるように、ソート順を定義する必要があります。

何らかの種類のポジションインデックスをソートする場合は、というように、データにpositionフィールドを追加する必要があります。

結論は次のとおりです。クエリでオーダーが定義され、子の順序が時間とともに変化する場合、FirebaseRecyclerAdapterは自動的にそれらの変更を反映します。データベース内のデータが正しいことを確認するだけです。

データを正しく注文するクエリを作成できない場合は、おそらくFirebaseRecyclerAdapterを使用せず、代わりにリスナーを使用してデータを読み取り、コード内のデータを手動でソートしてから、カスタムアダプタRecyclerViewに表示します。

1

データセットが変更されたことを通知、その内容を更新するには、アダプタを取得するには:

mAdapter.notifyDataSetChanged(); 
関連する問題