load more pagination(infinite scrolling) 을 구현하려고 합니다 . 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<>();
}
}
이것은 작동하지 않습니다: query.startAt(currentPage*TOTAL_ITEM_EACH_LOAD)
. Firebase 쿼리는 오프셋을 기반으로 하는 것이 아니라 시작할 항목을 아는 데 기반합니다.
Firebase의 페이지 매김 레시피:
orderByKey()
.startAt
.Firebase의 페이지 매김에 대한 수백 가지 질문이 이미 있으므로 다음을 확인하는 것이 좋습니다. https://stackoverflow.com/search?q=%5Bfirebase-realtime-database%5D%5Bandroid%5D+pagination
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다