我正在使用TableLayout。其中有100個項目,使其滾動我在ScrollView內使用Tablelayout。但我必須檢測用戶是否滾動到最後一行。如果用戶已經滾動到最後一個視圖,那麼用戶將顯示Toast消息。 但是如何知道用戶已經滾動到tablelayout的最後一行。我已經提到TableLayout inside ScrollVie w的代碼。如何獲取上一個滾動視圖位置,滾動視圖
http://huuah.com/using-tablelayout-on-android/
我正在使用TableLayout。其中有100個項目,使其滾動我在ScrollView內使用Tablelayout。但我必須檢測用戶是否滾動到最後一行。如果用戶已經滾動到最後一個視圖,那麼用戶將顯示Toast消息。 但是如何知道用戶已經滾動到tablelayout的最後一行。我已經提到TableLayout inside ScrollVie w的代碼。如何獲取上一個滾動視圖位置,滾動視圖
http://huuah.com/using-tablelayout-on-android/
如果新滾動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 ::");
}
}
謝謝,它爲我工作 – bapi
這也適用於我,但我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);
}
爲什麼不你使用'ListView'和'lv.setOnScrollListener()'或看看[這個SO答案](http://stackoverflow.com/questions/3948934/synchronise-scrollview-scroll-positions-android/3952629# 3952629) –
因爲不能使用listview。該項目已經開發完成。它有不同的地方 – bapi
嘗試看onOverScrolled方法.. – Rejinderi