2012-06-06 3 views
5

Я рассмотрел множество реализаций бесконечных списков. Один из них: https://github.com/commonsguy/cwac-endlessEndless Gridview

Все они используют listviews. И все они просто добавляют еще одну строку в список. Но когда мы рассматриваем Gridview (например, в Google Play Store) и добавляем вид загрузки в качестве другого элемента в сетке, он выглядит уродливым. Как я могу добиться того же в Play Маркете?

ответ

1

Ну, чтобы буквально использовать ту же технику, что и в EndlessAdapter, вы можете добавить N элементов в сетку, где N - количество столбцов.

Другой подход заключается в обнаружении, когда пользователь прокручивается около дна, а затем начинает работу фона, чтобы загрузить больше материала. У меня нет ссылки, но то, что я видел, использует OnScrollListener для определения вашей позиции прокрутки по мере ее изменения.

+0

Число столбцов - 2 в моем случае. Но я хочу объединить эти 2 слоя так, чтобы они выглядели как полная одна строка. Является ли это возможным. Я могу легко обнаружить и автоматически загружать OnScrollListener, но проблема в том, что я не могу отобразить ожидающий просмотр полной строки под GridView. – tasomaniac

+0

@ tasomaniac: «Возможно ли это» - они не могут быть физически объединены. Можете ли вы заставить их * смотреть * сливаться, сидя бок о бок, я не могу сказать, поскольку я никогда не пробовал это. – CommonsWare

+0

Я только хочу, чтобы он выглядел как игровой магазин. Он делает это. Когда я использую вашу библиотеку. Ожидающий вид становится элементом сетки. Даже высоты различны в игровом магазине. – tasomaniac

7

Я написал прослушиватель прокрутки и установил этот прослушиватель прокрутки в мой сетчатый вид. пожалуйста, исправьте меня, если обнаружена ошибка.

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

Хорошо, но где ваш "ожидающий просмотра"? Предположим, у вас есть 2 столбца GridView, можете ли вы добавить ожидающий просмотр в buttom как целую строку? (как слияние этих двух столбцов?); – tasomaniac

+0

Можете ли вы предоставить свои файлы xml? – tasomaniac

+0

используйте относительный макет, подобный этому, и обрабатывайте видимость в прослушивателе onscroll. – Bytecode

0

используйте относительный макет, подобный этому, и обрабатывать visiblity в 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 

>

+0

Извините за поздний комментарий, но этого я не хотел. Когда вы это сделаете, и если пользователь снова прокручивается, когда данные загружаются, они видят ожидающий вид внизу. Я не хочу этого. Я хотел бы, чтобы ожидающий взгляд выглядел как строка области прокрутки.Я думаю, что единственный способ сделать это - сделать его ListView и отобразить 2 столбца в каждой строке. А внизу, когда в списке загружается, отображается только одна строка ожидающего просмотра. – tasomaniac