私は無限のリストの多くの実装を見てきました。それらの1つはhttps://github.com/commonsguy/cwac-endlessです
それらはすべてリストビューを使用しています。そして、それらはすべて、リストに別の行を追加しているだけです。しかし、Gridview(Google Playストアのように)を検討し、読み込みビューをグリッド内の別のアイテムとして追加すると、見栄えが悪くなります。Playストアで同じことを達成するにはどうすればよいですか?
私は無限のリストの多くの実装を見てきました。それらの1つはhttps://github.com/commonsguy/cwac-endlessです
それらはすべてリストビューを使用しています。そして、それらはすべて、リストに別の行を追加しているだけです。しかし、Gridview(Google Playストアのように)を検討し、読み込みビューをグリッド内の別のアイテムとして追加すると、見栄えが悪くなります。Playストアで同じことを達成するにはどうすればよいですか?
スクロールリスナーを作成し、このスクロールリスナーをグリッドビューに設定しました。エラーが見つかった場合は修正してください。
例えば:
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);
}
}
で使用されているのと同じ手法を文字通り使用するにはEndlessAdapter
、グリッドに N 個のアイテムを追加します。ここで、N は列の数です。
もう 1 つのアプローチは、ユーザーが下部近くまでスクロールしたことを検出し、バックグラウンド作業を開始してさらに多くのものをロードすることです。便利なリンクはありませんが、私が見たものではOnScrollListener
、スクロール位置の変化に合わせて を使用しています。
このような相対レイアウトを使用して、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
>>