Firebase 데이터베이스의 데이터를 사용하여 RecyclerView에서 더 많은 페이지 매김(무한 스크롤)을 구현하는 방법

바빛BJ

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의 페이지 매김 레시피:

  1. 키, 값 또는 자식 속성 값에 따라 항목을 주문하십시오. 특별한 주문이 필요하지 않은 경우 를 사용하십시오 orderByKey().
  2. 데이터베이스에서 항목을 처리할 때 마지막 항목의 값과 키를 추적하십시오. 열쇠로 주문한 경우 열쇠만 있으면 됩니다.
  3. 항목의 다음 페이지를 로드하려면 마지막 값과 키를 에 전달하십시오 startAt.

Firebase의 페이지 매김에 대한 수백 가지 질문이 이미 있으므로 다음을 확인하는 것이 좋습니다. https://stackoverflow.com/search?q=%5Bfirebase-realtime-database%5D%5Bandroid%5D+pagination

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

TOP 리스트

  1. 1

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  2. 2

    std :: regex의 일관성없는 동작

  3. 3

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  4. 4

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  5. 5

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  6. 6

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  7. 7

    Ionic 2 로더가 적시에 표시되지 않음

  8. 8

    Seaborn에서 축 제목 숨기기

  9. 9

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  10. 10

    복사 / 붙여 넣기 비활성화

  11. 11

    ArrayBufferLike의 typescript 정의의 깊은 의미

  12. 12

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  13. 13

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  14. 14

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  15. 15

    PRNG 기간보다 순열이 더 많은 목록을 무작위로 섞는 방법은 무엇입니까?

  16. 16

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  17. 17

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  18. 18

    잘못된 구성 개체입니다. Webpack이 Angular의 API 스키마와 일치하지 않는 구성 개체를 사용하여 초기화되었습니다.

  19. 19

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  20. 20

    R의 마침표와 숫자 사이에 문자열 삽입

  21. 21

    Assets의 BitmapFactory.decodeStream이 Android 7에서 null을 반환합니다.

뜨겁다태그

보관