Endless Gridview

前端 未结 3 2152
天命终不由人
天命终不由人 2020-12-16 07:12

I have looked at lots of implementations of endless lists. One of them is https://github.com/commonsguy/cwac-endless

All of them are using listviews. And all of them

相关标签:
3条回答
  • 2020-12-16 07:24

    i have write a scroll listener and set this scroll listener to my grid view . please correct me if found error.

    EG:

    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);
        }
    }
    
    0 讨论(0)
  • 2020-12-16 07:27

    use a relative layout like this and handle the visiblity in onscroll listener

    <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
    

    >

    0 讨论(0)
  • 2020-12-16 07:32

    Well, to literally use the same technique as is used in EndlessAdapter, you might add N items to the grid, where N is your number of columns.

    Another approach is to detect when the user has scrolled near the bottom, then kick off the background work to load in more stuff. I don't have a link handy, but what I've seen uses an OnScrollListener to detect your scroll position as it changes.

    0 讨论(0)
提交回复
热议问题