2011-09-30 262 views
5

私はTableLayoutを使用しています。私はScrollView内でTablelayoutを使用しています。しかし、ユーザーが最後の行までスクロールしたかどうかを検出する必要があります。ユーザーが最後のビューにスクロールすると、ユーザーにはトーストメッセージが表示されます。 しかし、ユーザーがテーブルレイアウトの最後の行にスクロールしたことを知る方法。私はTableLayout inside ScrollVie wからコードを参照しました。最後のスクロールビューの位置を取得する方法、スクロールビュー

http://huuah.com/using-tablelayout-on-android/

+0

なぜドン'ListView'と' lv.setOnScrollListener() 'を使うか、[このSO答え]を見てください(http://stackoverflow.com/questions/3948934/synchronise-scrollview-scroll-positions-android/3952629# 3952629) –

+0

リストビューは使用できません。プロジェクトはすでに開発されています。それは別の場所でinactを持っています – bapi

+0

onOverScrolledメソッドを見てみてください.. – Rejinderi

答えて

13

新しいスクロールy座標+あなたがリストの最後に到達したことを意味し、スクロールビューの高さ> =テーブルビューの高さであれば。

これを達成するには、あなたのカストミックスクロールビューを作成する必要があります。

ステップ-1あなたがScrollView

package com.sunil; 
import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ScrollView; 

public class LDObservableScrollView extends ScrollView { 

    private LDObservableScrollViewListener scrollViewListener = null; 

    public LDObservableScrollView(Context context) { 
     super(context); 
    } 

    public LDObservableScrollView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public LDObservableScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void setScrollViewListener(LDObservableScrollViewListener 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); 
     } 
    } 

} 

ステップ-2を拡張するカスタムスクロールビューがscrollchanged

パッケージcom.sunilを検出するためのリスナーを作成します作成する必要があります。 import LDObservableScrollView;

public interface LDObservableScrollViewListener { 

    void onScrollChanged(LDObservableScrollView scrollView, int x, int y, int oldx, int oldy); 

} 

ステップ-3代わりにScrollViewのレイアウトXMLでカスタムスクロールビューを使用

<com.abc.LDObservableScrollView android:layout_width="fill_parent" android:layout_marginTop="1dip" 
     android:id="@+id/OLF_ScrollView" android:layout_height="fill_parent" android:background="@drawable/small_list_back"> 
     <TableLayout android:layout_width="fill_parent" android:id="@+id/OLF_tableLayout_TableLayout" android:layout_height="fill_parent"> 
     </TableLayout> 
    </com.abc.LDObservableScrollView> 

ステップ-4あなたの活動のクラスにしたり、検出したい場所スクロールイベントは使用フォローコード

public class DetectHere implements LDObservableScrollViewListener{ 
... 


LDObservableScrollView scrollView = (LDObservableScrollView)view.findViewById(R.id.OLF_ScrollView); 
     scrollView.setScrollViewListener(this); 

..... 

@Override 
    public void onScrollChanged(LDObservableScrollView scrollView, int x, 
      int y, int oldx, int oldy) { 
     // TODO Auto-generated method stub 
     if((scrollView.getHeight()+y) >= tableLayout.getHeight()){ 
      Log.e("Custom Listener ", "END OF LIST OCCURRED ::"); 
     } 
    } 
+0

ありがとう、それは私のために働いた – bapi

1

これは私にとってはうまくいったが、onScrollChangedのy値は決してg私のsamsung銀河タブ2 7の高さより高いets "。 しかし、それは、銀河のタブに2 10.1" 任意のアイデアなぜ?

の作品、私は画面は、例えば1000px一定の高さよりも小さいときにこの問題が発生したことを、今見てきた[編集] 。私が作ったときので、 10.1 "Galaxyタブ2で1200未満のスクロールのコンテンツは、最大の高さ検出のために動作を停止しました。

[編集] 私は解決策を見つけた、それは、私がやったことは以下の通りであったことを行うためには、正しくスクロールの大きさを検出していなかった。

protected void onScrollChanged(int horizontalScrollPosition, int verticalScrollPosition, int previousHorizontalScrollPosition, int previousVerticalScrollPosition) { 
    int scrollTotalHeight = this.getChildAt(0).getHeight() - super.getHeight(); 
    if(_previousImage != null) 
     if(verticalScrollPosition <= 0) _previousImage.setVisibility(View.GONE); 
    if(_nextImage != null) 
     if(verticalScrollPosition >= scrollTotalHeight) _nextImage.setVisibility(View.GONE); 
    super.onScrollChanged(horizontalScrollPosition, verticalScrollPosition, previousHorizontalScrollPosition, previousVerticalScrollPosition); 
} 
関連する問題