5

私は無限のリストの多くの実装を見てきました。それらの1つはhttps://github.com/commonsguy/cwac-endlessです

それらはすべてリストビューを使用しています。そして、それらはすべて、リストに別の行を追加しているだけです。しかし、Gridview(Google Playストアのように)を検討し、読み込みビューをグリッド内の別のアイテムとして追加すると、見栄えが悪くなります。Playストアで同じことを達成するにはどうすればよいですか?

4

3 に答える 3

7

スクロールリスナーを作成し、このスクロールリスナーをグリッドビューに設定しました。エラーが見つかった場合は修正してください。

例えば:

final GridView g = (GridView) findViewById(R.id.myGrid);
        g.setAdapter(new ImageAdapter(this));
        EndlessScrollListener scrollListener=new EndlessScrollListener(g,new RefreshList() {

            @Override
            public void onRefresh(int pageNumber) {
                System.out.println("On Refresh invoked..");

            }
        });
        g.setOnScrollListener(scrollListener);

/////////////////////////////////////////////// ///////////////////////

import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.GridView;

public class EndlessScrollListener implements OnScrollListener {

    private GridView gridView;
    private boolean isLoading;
    private boolean hasMorePages;
    private int pageNumber=0;
    private RefreshList refreshList;
    private boolean isRefreshing;

    public EndlessScrollListener(GridView gridView,RefreshList refreshList) {
        this.gridView = gridView;
        this.isLoading = false;
        this.hasMorePages = true;
        this.refreshList=refreshList;
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        if (gridView.getLastVisiblePosition() + 1 == totalItemCount && !isLoading) {
            isLoading = true;
            if (hasMorePages&&!isRefreshing) {
                isRefreshing=true;
                refreshList.onRefresh(pageNumber);
            }
        } else {
            isLoading = false;
        }

    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {

    }

    public void noMorePages() {
        this.hasMorePages = false;
    }

    public void notifyMorePages(){
        isRefreshing=false;
        pageNumber=pageNumber+1;
    }

    public interface RefreshList {
        public void onRefresh(int pageNumber);
    }
}
于 2012-06-13T18:12:56.793 に答える
1

で使用されているのと同じ手法を文字通り使用するにはEndlessAdapter、グリッドに N 個のアイテムを追加します。ここで、N は列の数です。

もう 1 つのアプローチは、ユーザーが下部近くまでスクロールしたことを検出し、バックグラウンド作業を開始してさらに多くのものをロードすることです。便利なリンクはありませんが、私が見たものではOnScrollListener、スクロール位置の変化に合わせて を使用しています。

于 2012-06-06T22:28:55.517 に答える
0

このような相対レイアウトを使用して、onscrollリスナーの可視性を処理します

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <GridView
        android:id="@+id/myGrid"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="60dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="auto_fit"
        android:padding="10dp"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp" />

    <View
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_alignBottom="@+id/myGrid"
        android:background="@android:color/white" />

</RelativeLayout

>>

于 2012-06-14T17:41:23.627 に答える