我正在开发一个用于列出在线商店产品的Android应用程序。为此,我使用了GridView
。但是在一个类别中可能是大量的产品,所以我必须实现一个功能,如“按需加载”,在gridView
告诉(加载更多)的末尾有一个按钮。当然,只有当GridView
到达项目的末尾时,此按钮才可见。但我不知道怎么做。到目前为止,下面是我的解决方案,但是当gridview
结束时,该按钮不可见。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<com.twotoasters.jazzylistview.JazzyGridView
android:id="@+id/ebuy_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:drawSelectorOnTop="true"
android:horizontalSpacing="15dp"
android:numColumns="2"
android:verticalSpacing="15dp" />
<TextView
android:id="@+id/more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:background="@drawable/ebuy_now_background"
android:clickable="true"
android:onClick="loadMore"
android:padding="15dp"
android:text="Load More"
android:textColor="@color/ebuy_color_second_strip"
android:textSize="25sp" />
</LinearLayout>
</ScrollView>
建议或其他解决方案将非常受欢迎:)
答案 0 :(得分:0)
使“加载更多”按钮成为GridView的一部分 - 在“getView”方法中,当“position”对应于最后一项时,使用按钮对布局进行膨胀。
答案 1 :(得分:0)
当您实现并将此侦听器添加到Gridview时,这将检测Gridview的结尾,因为滚动位置位于列表末尾,只是获取更多数据。在加载数据期间,当滚动位置结束时,您需要一个标志一次加载数据。因此,如果数据正在加载,并且在此期间您向上滚动然后向下滚动,那么它将无法获得更多数据用于执行。
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
this.currentFirstVisibleItem = firstVisibleItem;
this.currentVisibleItemCount = visibleItemCount;
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
this.currentScrollState = scrollState;
this.isScrollCompleted();
}
private void isScrollCompleted() {
if (this.currentVisibleItemCount > 0 && this.currentScrollState == SCROLL_STATE_IDLE) {
/*** In this way I detect if there's been a scroll which has completed ***/
/*** do the work for load more date! ***/
if(!isLoading){
isLoading = true;
loadMoreDAta();
}
}
}