私は ListView とそれに入る非常に大量のアイテムを持っています (数百のように)。ListView を 20 個のアイテムで開始し、ユーザーがスクロールするにつれてそれを拡大して、「圧倒的」にならないようにしたいと考えています。
どうすればこれを行うことができますか?
私は ListView とそれに入る非常に大量のアイテムを持っています (数百のように)。ListView を 20 個のアイテムで開始し、ユーザーがスクロールするにつれてそれを拡大して、「圧倒的」にならないようにしたいと考えています。
どうすればこれを行うことができますか?
これが私がやった方法です:
観察可能なスクロール ビュー クラスを作成しました。
public class ObservableScrollView extends ScrollView{
private ScrollViewListener scrollViewListener = null;
public ObservableScrollView(Context context) {
super(context);
}
public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if(scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
}
Scroll View Listener という新しいインターフェイスを作成しました。
public interface ScrollViewListener {
void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);
}
次に、アクティビティでこのインターフェイスを実装しました。
public class MainActivity extends Activity implements
ScrollViewListener {
次に、次の方法を使用するように強制します。
// scroll view listener. used to load new page if user scrolls to bottom
@Override
public void onScrollChanged(ObservableScrollView scrollView, int x, int y,
int oldx, int oldy) {
View view = (View) scrollView
.getChildAt(scrollView.getChildCount() - 1);
int diff = (view.getBottom() - (scrollView.getHeight() + scrollView
.getScrollY()));
if (diff <= DISTANCE_FROM_BOTTOM) {
LOADNEXTTHINGS();
}
}
私のDISTANCE_FROM_BOTTOM
記憶が正しければ、ピクセル単位です。
LOADNEXTTHINGS()
ユーザーがスクロール位置を と の間の範囲で変更している場合、 が呼び出されることに注意してくださいdiff <= DISTANCE_FROM_BOTTOM
。これを制御するには、読み込み値が必要です...のように
if(diff <= DISTANCE_FROM_BOTTOM && !loadingNextThings){
loadingNextThings = true;
LOADNEXTTHINGS();
}
次に、ロードが完了したら、次のことを行いますloadingNextThings = false;
個人的には、FSM を使用することを好みます。
エンドレス アダプターを使用できます。リスト ビューの下部に到達すると通知されるだけなので、アダプターにデータを追加できます。一番下に到達するたびに 20 個の要素を追加するようなものです。
ここにリンクがあります: