Đây không phải là giải pháp chính xác cho vấn đề nhận dữ liệu của bạn từ cơ sở dữ liệu theo thứ tự ngược lại, nhưng dù sao, chúng tôi cũng làm việc khác.
Công việc đầu tiên xung quanh được đề cập trong nhận xét về việc sử dụng bộ điều hợp tùy chỉnh cho danh sách của bạn.
Để đạt được hành vi bạn cần để lấy dữ liệu Firebase trong danh sách và sau đó bạn đã tự mình đảo ngược dữ liệu trước khi chuyển nó đến bộ điều hợp. Đơn giản! Công việc thứ hai xung quanh dễ dàng như chiếc bánh và tôi nghĩ rằng nếu bạn đang sử dụng RecyclerView
nó có thể làm thủ thuật cho bạn và tôi xem nó như là cách đơn giản nhất bạn có thể thực hiện công việc.
Dưới đây là tôi đang sửa đổi một số mã của tôi với 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);
}
Bằng cách đặt mLayoutManager.setReverseLayout(true);
- bạn đang đảo ngược bố trí của bạn và mLayoutManager.setStackFromEnd(true);
vị trí quan điểm về đầu trang trong danh sách của bạn.
Di chuyển đến RecyclerView
thật đơn giản. bố trí của bạn sẽ được một cái gì đó như thế này
<?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>
Và trong build.gradle
dependencies {
compile 'com.android.support:recyclerview-v7:23.4.0'
}
của bạn Bạn cần có FirebaseRecyclerAdapter
có thể được tìm thấy ở đây trong FirebaseUI thư viện.
Lưu ý: Không sử dụng RecyclerView.LayoutManager
như các chức năng setReverseLayout
và setStackFromEnd
sẽ không thể tìm thấy trong RecyclerView.LayoutManager
. Sử dụng LinearLayoutManager
như đã nêu.
Cập nhật
Đây là cách bạn có thể xử lý các sự kiện nhấp chuột của các mục trong danh sách.
Bạn phải khai báo một số ViewHolder
để thực hiện quyền RecyclerView
? Chỉ cần thêm một hàm khác bên trong lớp ViewHolder
của bạn như ví dụ bên dưới và gọi hàm này sau các hàm setText
bạn đã có.
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)...
}
}
Tại sao bạn lại muốn sử dụng bộ điều hợp Firebase ngay từ đầu? Tôi chỉ có một cái nhìn tại Adapter Firebase và nó chỉ là một adapter đơn giản kéo dài từ BaseAdapter. Tôi khuyên bạn nên tạo bộ điều hợp riêng của mình nếu bạn cần tùy chỉnh mọi thứ. – abeikverdi
Vâng, tôi rất mới với Firebase và cũng không quá kinh nghiệm trong Java để phát triển Android. Tôi thấy rằng FirebaseListAdapter đã nhanh chóng và dễ thực hiện, vì vậy ban đầu tôi quyết định sẽ là một ý tưởng hay khi sử dụng nó. –
@abeikverdi các bộ điều hợp trong FirebaseUI ẩn khá phức tạp sau một số mã khá nhỏ. Dựa trên kinh nghiệm nào bạn khuyên bạn nên viết cho riêng mình? –