簡體   English   中英

無限滾動水平ScrollView

[英]Infinite Scrolling Horizontal ScrollView

我正在為學校項目開發我的第一個應用程序。 我從來沒有上過Java課,所以我正在獨自學習創建android應用的所有基礎知識。 當前,我的應用程序已與Firebase Realtime數據庫集成,並且在我的Home_Fragment中有一個Horizo​​ntalScrollView,其中帶有FrameLayout,在該FrameLayout中,我具有三個ImageView。 就像這樣:請單擊此處查看 希望您能理解我的所作所為。 這些ImageView包含一些存儲在我的Firebase Realtime數據庫中的圖像。 這是我的Horizo​​ntalScrollView的XML開頭:

<HorizontalScrollView
    android:id="@+id/scrlVPrincipal2"
    android:layout_width="545dp"
    android:layout_height="414dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="32dp"
    android:scrollbars="none"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/txtHomeDesc"
    app:layout_constraintVertical_bias="0.42"
    tools:ignore="MissingConstraints"
    tools:layout_editor_absoluteX="0dp">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:paddingRight="1000dp">


        <RelativeLayout
            android:layout_width="1066dp"
            android:layout_height="match_parent">


            <ImageView
                android:id="@+id/imgCard1"
                android:layout_width="259dp"
                android:layout_height="390dp"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:layout_marginStart="13dp"
                android:layout_weight="1"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.504"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.801" />

            <ImageView
                android:id="@+id/imgCard3"
                android:layout_width="259dp"
                android:layout_height="390dp"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:layout_marginEnd="221dp"
                android:layout_weight="1"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.504"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.801" />

            <TextView
                android:id="@+id/txtPaisNome"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentStart="true"
                android:layout_gravity="bottom"
                android:layout_marginBottom="25dp"
                android:layout_marginStart="27dp"
                android:text="TextView"
                android:textAlignment="center"
                android:textColor="@color/colorWhite"
                android:textSize="25dp" />

            <ImageView
                android:id="@+id/imgCard2"
                android:layout_width="259dp"
                android:layout_height="390dp"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:layout_gravity="right"
                android:layout_marginStart="298dp"
                android:layout_weight="1"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.504"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.801" />

        </RelativeLayout>
    </FrameLayout>

</HorizontalScrollView>

這是我用來從數據庫中獲取圖像的代碼(以及國家的相應名稱):

mDatabase = FirebaseDatabase.getInstance().getReference();
    DatabaseReference countriesRef = mDatabase.child("paises");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> urlList = new ArrayList<>();
            List<String> nomePaisList = new ArrayList<>();

            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String url = ds.child("Imagem").getValue(String.class);
                String nomePais = ds.child("Nome").getValue(String.class);
                urlList.add(url);
                nomePaisList.add(nomePais);
            }

            int urlCount = urlList.size();
            int randomNumber = new Random().nextInt(urlCount);
            List<String> randomUrlList = new ArrayList<>();
            List<String> randomNomePaisList = new ArrayList<>();
           for (int i=0; i<=Constants.TOTAL_PAISES; i++) {
                randomUrlList.add(urlList.get(randomNumber));
                randomNomePaisList.add(nomePaisList.get(randomNumber));
                Picasso.with(getContext()).load(randomUrlList.get(i)).into(imgCard1); // Inserir na ImageView a imagem do respetivo país
                txtPaisNome.setText(randomNomePaisList.get(i)); // Inserir na TextView o nome do respetivo país
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    countriesRef.addListenerForSingleValueEvent(valueEventListener);

話雖如此,我想問的是:
如何使這些ImageView的滾動無限遠? 每次用戶滑動時,未顯示的ImageView都會獲得一個新圖像,並產生ImageViews的效果?

我實際上是在想您要做的事是不可能的。 但是,如果您准備嘗試新的東西,建議您使用RecyclerView並在到達RecyclerView最后一個元素時,從數據庫中檢索數據,並將其添加到RecyclerView的數據列表中。

您可以使用回收視圖而不是滾動視圖來執行此操作。

水平使用回收視圖並添加滾動偵聽器。

然后從服務器加載圖像並顯示它。

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);
    totalItemCount = llm.getItemCount();
    lastVisibleItem = llm.findLastVisibleItemPosition();
    if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
        isLoading = true;
        myList.add(new myObject(TYPE_BOTTOM_LOADING));
        recyclerView.post(new Runnable() {
            @Override
            public void run() {
                mAdapter.notifyItemInserted(myList.size() - 1);
            }
        });
        startIndex += INDEX_INTERVAL;
        endIndex += INDEX_INTERVAL;
        getMyList(startIndex, endIndex);
    }
}});

請參考這里:) http://www.devexchanges.info/2017/02/android-recyclerview-dynamically-load.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM