2011-09-30 11 views
5

Używam TableLayout. które mają 100 elementów do przewinięcia Używam Tablelayout wewnątrz ScrollView. Ale muszę wykryć, czy użytkownik przewinął do ostatniego wiersza. Jeśli użytkownik przewinął do ostatniego widoku, użytkownik zostanie wyświetlony komunikat Toast. Ale jak sprawdzić, czy użytkownik przewinął do ostatniego wiersza tabeli tablelayout. Odesłałem kod z TableLayout inside ScrollVie w.Jak uzyskać ostatnią pozycję widoku przewijania, przewiń widok

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

+0

dlaczego don używasz 'ListView' i' lv.setOnScrollListener() 'LUB spójrz na [to odpowiedź SO] (http://stackoverflow.com/questions/3948934/synchronise-scrollview-scroll-positions-android/3952629# 3952629) –

+0

Nie mogę używać listview ponieważ. projekt jest już opracowany. ma wpływ na różne miejsca – bapi

+0

spróbuj spojrzeć na metodę onOverScrolled .. – Rejinderi

Odpowiedz

13

Jeśli nowy Scrolled y pozycja + widok przewijania wysokość wysokość> = tableview to znaczy Osiągnięto koniec listy.

Aby to osiągnąć, musisz napisać przeglądarkę custiom.

Krok 1 Musisz utworzyć niestandardową przewijania widok rozciągający 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); 
     } 
    } 

} 

Krok 2 Tworzenie detektor wykrywa scrollchanged

pakiet com.sunil; import LDObservableScrollView;

public interface LDObservableScrollViewListener { 

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

} 

Krok 3 w układzie XML zamiast Scrollview użyć widoku niestandardowego przewijania

<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> 

Krok 4 W swojej klasie działalność lub w którym chcesz wykryć zdarzenie przewijania użyć follwoing code

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

Dzięki, to działało dla mnie – bapi

1

To również zadziałało u mnie, ale moja wartość y na onScrollChanged nigdy nie była ets wyższy niż wysokość w zakładce Samsung Galaxy 2 7 ". Ale to działa na Galaxy Tab 2 10.1" Jakieś pomysły dlaczego?

[Edytuj] Widziałem teraz, że tak się dzieje, gdy ekran jest mniejszy od pewnej wysokości, 1000px na przykład. Bo kiedy zrobiłem zawartość mojego zwoju mniejszego niż 1200 na karcie 10.1 "Galaxy 2 przestała działać, aby wykryć maksymalną wysokość.

[Edytuj] Znalazłem rozwiązanie, nie było wykrywanie rozmiaru przewijania poprawnie, aby zrobić to, co zrobiłem, było następujące:

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); 
}