Мое приложение возвращает последние данные из firebase в buttom ListView. Но я хочу, чтобы это было на вершине! Я подумал об этом, и я думаю, что есть только два возможных способа сделать это.Android FireBase change Listview order
1.Инвертировать список.
Я думаю, что таким образом, как это должно быть сделано, но я не мог понять это. Я искал много в Интернете, но не подходящее решение для моего случая
Это мой адаптер код
public void onStart() {
super.onStart();
// Setup our view and list adapter. Ensure it scrolls to the bottom as data changes
final ListView listView = getListView();
// Tell our list adapter that we only want 50 messages at a time
mChatListAdapter = new ChatListAdapter(mFirebaseRef.limit(50), this, R.layout.chat_message, mUsername);
listView.setAdapter(mChatListAdapter);
}
И это код ChatListAdapter
конструктор для пользовательского списка класса ChatListAdapter
, который проходит специальное список адаптеров класса FirebaseListAdapter
:
public ChatListAdapter(Query ref, Activity activity, int layout, String mUsername) {
super(ref, Chat.class, layout, activity);
this.mUsername = mUsername;
}
[Редактировать] Это часть кода для FirebaseListAdapter
, который расширяет класс BaseAdapter
public FirebaseListAdapter(Query mRef, Class<T> mModelClass, int mLayout, Activity activity) {
this.mRef = mRef;
this.mModelClass = mModelClass;
this.mLayout = mLayout;
mInflater = activity.getLayoutInflater();
mModels = new ArrayList<T>();
mModelKeys = new HashMap<String, T>();
// Look for all child events. We will then map them to our own internal ArrayList, which backs ListView
mListener = this.mRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
T model = dataSnapshot.getValue(FirebaseListAdapter.this.mModelClass);
mModelKeys.put(dataSnapshot.getKey(), model);
// Insert into the correct location, based on previousChildName
if (previousChildName == null) {
mModels.add(0, model);
} else {
T previousModel = mModelKeys.get(previousChildName);
int previousIndex = mModels.indexOf(previousModel);
int nextIndex = previousIndex + 1;
if (nextIndex == mModels.size()) {
mModels.add(model);
} else {
mModels.add(nextIndex, model);
}
}
}
2. По убыванию запроса данных.
Второй путь невозможен для меня, потому что, когда я искал документацию Firebase API и в Интернете, я не мог найти все равно, чтобы заказать восстановленные данные по убыванию.
Мои данные о firebase выглядеть следующим образом:
glaring-fire-9714
chat
-Jdo7-l9_KBUjXF-U4_c
author: Ahmed
message: Hello World
-Jdo71zU5qsL5rcvBzRl
author: Osama
message: Hi!
Спасибо.
Почему не могли бы вы сделайте что-то вроде mFirebaseRef.orderByChild («ключ»). limit (50), как описано в этом сообщении: https://www.firebase.com/docs/android/guide/retrieving-data .html # section-queries –
@MichaelKrause Я пробовал это, но это не вызывает уважения. Сортируется по возрастанию – sabsab
Вы не можете изменить порядок сортировки. Но то, что вы можете изменить, - это взять первые элементы ('limitToFirst') или последние элементы (' limitToLast'). После этого вы можете инвертировать элементы в вашем Java-коде. Фактически, вы * должны * уже делать это, так как более поздние предметы могут выходить из строя. Используйте параметр 'previousChild', чтобы определить, где новый элемент принадлежит в последовательности. –