2011-09-30 102 views
5

我正在使用TableLayout。其中有100个项目,使其滚动我在ScrollView内使用Tablelayout。但我必须检测用户是否滚动到最后一行。如果用户已经滚动到最后一个视图,那么用户将显示Toast消息。 但是如何知道用户已经滚动到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

因为不能使用listview。该项目已经开发完成。它有不同的地方 – bapi

+0

尝试看onOverScrolled方法.. – Rejinderi

回答

13

如果新滚动y位置+滚动视图高度> =的tableview高度,这意味着你已经达到列表的末尾。

要实现这一点,你必须编写你的custiom滚动视图。

步骤-1你必须创建延伸滚动型

定制滚动视图
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布局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在您的活动类或您要检测的滚动事件中使用follwoing代码

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比三星银河标签2 7“的高度要高。 但它的工作原理的Galaxy Tab 2 10.1" 任何想法,为什么?

[编辑] 我现在已经看到,当屏幕小于一定高度出现这种情况,1000像素的实例。因为当我做了我的滚动内容在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); 
} 
相关问题