Android 无穷无尽的网格视图

Android 无穷无尽的网格视图,android,commonsware-cwac,Android,Commonsware Cwac,我已经看过很多无止境列表的实现。其中之一是 他们都在使用ListView。所有这些都只是在列表中添加另一行。但是当我们考虑GRIDVIEW(比如在谷歌Play Store中)并将加载视图添加到网格中的另一个项目时,它看起来很丑陋。如何在Play Store中实现相同的功能?好吧,要使用与EndlessAdapter中相同的技术,您可以向网格中添加N个项目,其中N是列数 另一种方法是检测用户何时在底部附近滚动,然后启动后台工作以加载更多内容。我手头没有链接,但我看到的是使用OnScrollList

我已经看过很多无止境列表的实现。其中之一是


他们都在使用ListView。所有这些都只是在列表中添加另一行。但是当我们考虑GRIDVIEW(比如在谷歌Play Store中)并将加载视图添加到网格中的另一个项目时,它看起来很丑陋。如何在Play Store中实现相同的功能?

好吧,要使用与
EndlessAdapter
中相同的技术,您可以向网格中添加N个项目,其中N是列数


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

我编写了一个滚动监听器,并将此滚动监听器设置为我的网格视图。如果发现错误,请纠正我

例如:

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

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);
    }
}

使用类似这样的相对布局并处理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


在我的例子中,列数是2。但我想合并这两个层,使它们看起来像一个完整的一行。有可能吗。我可以使用OnScrollListener轻松地检测和自动加载,但问题是我无法在GridView下显示完整行的挂起视图。@tasomaniac:“有可能吗”--它们无法物理合并。我不能说,你们是否可以让他们并排坐着,让他们看起来更合拍,因为我从来并没有试过,我只想让它看起来像游戏商店。它做到了。当我使用你的图书馆时。挂起视图成为网格的一个元素。甚至游戏商店的高度也不一样。@tasomaniac:也许游戏商店没有使用
GridView
。它当然没有使用EndlessAdapter,当然没有使用EndlessAdapter,但我认为它在应用程序页面中使用了gridview。好的,但是您的“待定视图”在哪里?假设您有一个2列的GridView,您是否能够在buttom作为一整行添加一个挂起的视图?(就像合并这两列一样?);您还可以提供xml文件吗?使用这样的相对布局并处理onscroll listenerOK中的可见性假设您使用的是相对布局并在加载时将挂起的视图设置为可见。然后,如果用户将gridview滚动到顶部,则挂起的视图将不会滚动并卡在网格底部。我说得对吗?我希望它能像在Google Play Store中一样用gridview滚动。@tasomaniac:是的,我不知道该如何处理这种情况。很抱歉,最近发表了评论,但这不是我想要的。执行此操作时,如果用户在加载数据时再次向上滚动,他们会在底部看到挂起的视图。我不想要它。我希望挂起的视图像滚动区域的一行一样工作。我认为唯一的方法是将其设置为ListView,并在每行中显示2列。当列表加载时,在底部只显示一行挂起的视图。
<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