To nie jest dokładne rozwiązanie problemu pobierania danych z firebase w odwrotnej kolejności, ale w każdym razie mamy inne prace do wykonania.
Pierwsza praca jest wymieniona w komentarzu dotyczącym używania niestandardowego adaptera do listy.
Aby uzyskać takie zachowanie, należy uzyskać dane z bazy danych na liście, a następnie należy odwrócić je samodzielnie przed przekazaniem do adaptera. Prosty!
Druga praca jest łatwa jak ciasto i myślę, że jeśli używasz RecyclerView
, to może ci to pomóc i uważam to za najprostszy sposób na wykonanie tej pracy.
Tutaj to ja modyfikując niektóre z moich kodu z RecyclerView
// Declare the RecyclerView and the LinearLayoutManager first
private RecyclerView listView;
private LinearLayoutManager mLayoutManager;
...
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
// Use FirebaseRecyclerAdapter here
// Here you modify your LinearLayoutManager
mLayoutManager = new LinearLayoutManager(MainActivity.this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
// Now set the layout manager and the adapter to the RecyclerView
listView.setLayoutManager(mLayoutManager);
listView.setAdapter(adapter);
}
Ustawiając mLayoutManager.setReverseLayout(true);
- jesteś cofania układ i mLayoutManager.setStackFromEnd(true);
pozycji widoku na górę twojej listy.
Migracja do RecyclerView
jest prosta. Twój układ będzie coś takiego
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<android.support.v7.widget.RecyclerView
android:id="@+id/my_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
iw swoim build.gradle
dependencies {
compile 'com.android.support:recyclerview-v7:23.4.0'
}
Trzeba mieć FirebaseRecyclerAdapter
można tu znaleźć w FirebaseUI bibliotece.
Uwaga: Nie używaj RecyclerView.LayoutManager
jako funkcji setReverseLayout
i setStackFromEnd
nie będzie można znaleźć w RecyclerView.LayoutManager
. Użyj podanego LinearLayoutManager
.
Aktualizacja
Oto jak można obsługiwać zdarzenia kliknięcia pozycji na liście.
Musisz zadeklarować ViewHolder
w celu wprowadzenia prawa RecyclerView
? Po prostu dodaj inną funkcję wewnątrz klasy ViewHolder
, tak jak w poniższym przykładzie i wywołaj tę funkcję po funkcjach setText
, które tam masz.
public static class MyViewHolder extends RecyclerView.ViewHolder {
View mView;
public MyViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setClickEvent() {
// Set the onClickListener on mView
// mView.setOnClickListener(new OnClickListener)...
}
}
Po co w ogóle korzystać z adaptera Firebase? Właśnie rzuciłem okiem na Firebase Adapter i jego prostą kartę, która rozciąga się od BaseAdaptera. Zdecydowanie zaleca się utworzenie własnego adaptera, jeśli chcesz dostosować ustawienia. – abeikverdi
Cóż, jestem bardzo początkujący w Firebase, a także niezbyt doświadczony w Javie dla rozwoju Androida. Widziałem, że FirebaseListAdapter był szybki i łatwy w implementacji, więc początkowo zdecydowałem, że warto go użyć. –
@abeikverdi Adaptery w FirebaseUI kryją dość złożoność za dość małym kodem. W oparciu o to, czego doś wiadczeń zalecamy napisanie własnego? –