【发布时间】:2020-12-28 22:58:01
【问题描述】:
我正在尝试实现加载更多分页(无限滚动)。我正在从 Firebase 实时数据库获取数据。
数据正在RecyclerView中使用。
当用户滚动时,我想在他到达 recyclerView 的末尾时再加载 10 个项目。
我试图在互联网上找到解决方案,但没有找到任何解决方案。
这是我的 MainActivity:-
public class MainActivity extends AppCompatActivity {
private ArrayList<CoffeeItem> coffeeItems;
private CoffeeAdapter coffeeAdapter;
private Context context = MainActivity.this;
static RecyclerView recyclerView;
private DatabaseReference reference;
private StorageReference mStorageRef;
GridLayoutManager manager;
private int currentPage = 1;
private static final int TOTAL_ITEM_EACH_LOAD = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
manager = new GridLayoutManager(this,2);
coffeeItems = new ArrayList<>();
recyclerView.setLayoutManager(manager);
reference = FirebaseDatabase.getInstance().getReference();
mStorageRef = FirebaseStorage.getInstance().getReference();
recyclerView.setOnScrollListener(new EndlessRecyclerOnScrollListener(manager) {
@Override
public void onLoadMore(int current_page) {
loadMoreData();
}
});
init();
}
private void init() {
clearAll();
Query query = reference.child("Images");
query.limitToFirst(TOTAL_ITEM_EACH_LOAD);
query.startAt(currentPage*TOTAL_ITEM_EACH_LOAD);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
CoffeeItem coffeeItem = new CoffeeItem();
coffeeItem.setUrl(snapshot.child("url").getValue().toString());
coffeeItem.setDescription(snapshot.child("description").getValue().toString());
coffeeItems.add(coffeeItem);
}
coffeeAdapter = new CoffeeAdapter(coffeeItems, context);
recyclerView.setAdapter(coffeeAdapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
coffeeAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void loadMoreData(){
currentPage++;
init();
}
private void clearAll() {
if (coffeeItems != null){
coffeeItems.clear();
if (coffeeAdapter != null) {
coffeeAdapter.notifyDataSetChanged();
}
}
coffeeItems = new ArrayList<>();
}
}
【问题讨论】:
标签: java android firebase firebase-realtime-database android-recyclerview