2012-06-06 1 views
5

私は無限リストの実装をたくさん見てきました。そのうちの1つはhttps://github.com/commonsguy/cwac-endlessエンドレスグリッドビュー

です。これらはすべてリストビューを使用しています。そしてそれらのすべては単にリストに別の行を追加するだけです。 Gridview(Google Play Storeのような)を検討して、読み込みビューをグリッド内の別のアイテムとして追加すると、見栄えが悪くなります。 Playストアで同じことを達成するにはどうすればよいですか?

答えて

1

文字通りEndlessAdapterで使用されているのと同じテクニックを使用するには、グリッドにN個の項目を追加することができます。ここでNは列の数です。

もう1つの方法は、ユーザーが底の近くをスクロールしたときを検出し、さらに多くのものを読み込むためにバックグラウンドの仕事を開始することです。便利なリンクはありませんが、私が見たところではOnScrollListenerを使用してスクロール位置が変化するのを検出します。

+0

私の場合、列の数は2です。しかし、私はこれらの2つのレイヤーをマージして、完全な1つの行のように見せたいと思います。出来ますか。 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に保留中のビューを追加することができますか? (これらの2つの列をマージするのと同じように? – tasomaniac

+0

xmlファイルも提供できますか? – tasomaniac

+0

このような相対レイアウトを使用して、オンスクリーンリスナーの可視性を処理します。 – Bytecode

0

このような相対的なレイアウトを使用し、 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

遅いコメントを申し訳ありませんが、これは私が望んでいません。これを行うと、データがロードされているときにユーザーが再び上にスクロールすると、一番下に保留中のビューが表示されます。私はそれを望んでいない。私は保留中のビューをスクロール領域の行のように動作させたいと思います。私はそれを行うための唯一の方法は、リストビューとすべての行に2列を表示することだと思う。リストがロードされている最下部には、保留中のビューの1行だけが表示されます。 – tasomaniac