期:標記星星到郵件時,它在列表中向前移動,高位郵件在頂部移動。
原因:的FirebaseRecyclerAdapter
public FirebaseRecyclerAdapter(Class<T> modelClass, int modelLayout, Class<VH> viewHolderClass, Query ref) {
this.mModelClass = modelClass;
this.mModelLayout = modelLayout;
this.mViewHolderClass = viewHolderClass;
this.mSnapshots = new FirebaseArray(ref);
this.mSnapshots.setOnChangedListener(new OnChangedListener() {
public void onChanged(EventType type, int index, int oldIndex) {
switch(null.$SwitchMap$com$firebase$ui$database$FirebaseArray$OnChangedListener$EventType[type.ordinal()]) {
case 1:
FirebaseRecyclerAdapter.this.notifyItemInserted(index);
break;
case 2:
FirebaseRecyclerAdapter.this.notifyItemChanged(index);
break;
case 3:
FirebaseRecyclerAdapter.this.notifyItemRemoved(index);
break;
case 4:
FirebaseRecyclerAdapter.this.notifyItemMoved(oldIndex, index);
break;
default:
throw new IllegalStateException("Incomplete case statement");
}
}
});
}
這裏的代碼,你可以看到,每當適配器的任何項目發生變化時,它就會通知和名單得到通過在查詢中提供的順序重新排列。
現有代碼:MyTopPostFragment
在此您正在生成,這將始終用來顯示列表,記住這個查詢將被使用,而適配器通知,以及我上面說的查詢。
public class MyTopPostsFragment extends PostListFragment {
public MyTopPostsFragment() {}
@Override
public Query getQuery(DatabaseReference databaseReference) {
String myUserId = getUid();
Query myTopPostsQuery = databaseReference.child("user-posts").child(myUserId)
.orderByChild("starCount");
return myTopPostsQuery;
}
}
解決方案:
MyTopPostFragment - 變化(從查詢中刪除訂單)
@Override
public Query getQuery(DatabaseReference databaseReference) {
String myUserId = getUid();
Query myTopPostsQuery = databaseReference.child("user-posts").child(myUserId);
// .orderByChild("starCount"); Removed order from here
return myTopPostsQuery;
}
PostListFragment - 更改(添加,以便查詢)
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// 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);
postsQuery.orderByChild("starCount"); // Added Order HERE
mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class, R.layout.item_post,
PostViewHolder.class, postsQuery) {