无尽的Gridview

tas*_*iac 5 android commonsware-cwac

我看过很多无尽列表的实现.其中一个是https://github.com/commonsguy/cwac-endless

他们都使用listviews.而且所有这些只是在列表中添加另一行.但是当我们考虑Gridview(就像在Google Play商店中)并将加载视图添加为网格中的另一个项目时,它看起来很难看.我怎样才能在Play商店中实现同样的目标?

Byt*_*ode 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);
Run Code Online (Sandbox Code Playgroud)

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Com*_*are 1

好吧,从字面上使用与中使用的相同的技术EndlessAdapter,您可以将 N 个项目添加到网格中,其中 N 是列数。

另一种方法是检测用户何时滚动到底部附近,然后启动后台工作以加载更多内容。我没有方便的链接,但我所看到的使用 来OnScrollListener检测滚动位置的变化。