2010-11-25 7 views
2
public class SynchronisedScrollView extends ListView { 

    private ScrollViewListener scrollViewListener = null; 

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

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

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


    @Override 
    protected void onScrollChanged(int x, int y, int oldx, int oldy) { 

     Log.d("Hello", "I am scrolled"); 
    // super.onScrollChanged(x, y, oldx, oldy); 
    } 
} 

listView가 스크롤되는 양을 파악하고자하므로 ListView를 확장합니다. 나는 목록을 스크롤 할 입니다. 그러나 OnScrollChanged는 호출되지 않습니다. 의 경우 ScrollViewHorizontalScrollView OnScrollChanged는 스크롤 할 때마다 호출됩니다. ListView를 스크롤 할 때 트리거되는 함수입니다.ListView에서 스크롤 할 때 호출되는 함수

답변

4

ListViewonScroll() 이벤트를 받으려면 onScrollListener을 명시 적으로 등록해야합니다. ViewGroup에서

public void offsetChildrenTopAndBottom(int offset) { 
    // ... 
} 

:

+1

OnScrollListener에서 x 및 y 값을 가져와야하므로 ScrollTo (x, y)를 사용하여 다른 ListView를 해당 위치로 스크롤 할 수 있습니다. –

+0

이것은'ListView'이므로 x, y를 얻지 못합니다. 'onScroll'에서 얻는 것은 요소의 인덱스입니다. 링크에서'onScroll'의 javadocs를보십시오. –

+0

감사합니다. 나는 시도 할 것이다. 우리는 onScrollChanged를 가지고 놀 수는 없습니까? :(그렇다면 onScrollChanged의 사용법은 무엇입니까? –

0

나는 당신이 찾고있는 방법이라고 생각합니다. 당신이 할 수있는 것은 ListView 중 하나에 주어진 오프셋을 수집하고 다른 ListView로 전달 ListView를 확장하는 것입니다. recieven end에서 super.offsetChildrenTopAndBottom을 호출했는지 확인하십시오. 그렇지 않으면 쉽게 stackoverflow로 끝날 수 있습니다.

나는 개인적인 방법을 만들고 새로운 Observable view를 가질 것이다.

public class ObservableListView extends ListView { 

    private ObservableListView peer; 

    // [Constructors] make sure you override all the super constructors. 
    // Can have trouble with layouts otherwise 

    public void setPeer(ObservableListView peer) { 
     this.peer = peer; 
    } 

    @Override 
    public void offsetTopAndBottom(int offset) { 
     super.offsetTopAndBottom(offset); 
     if (peer != null) { 
      peer.internalVerticalOffset(offset); 
     } 
    } 

    private void internalVerticalOffset(int offset) { 
     super.offsetTopAndBottom(offset); 
    } 

} 

당신은 용감 느낌이 있다면 당신은 또한 동료 관계를 설정하는 것이 하나를 ListView의 ID 중 하나를 포기하게 할 수있는 XML 속성을 정의 할 수 있습니다.


내 나쁜

, 이것은 비 작업 코드 (당신이 관심이 있다면 나는 확장 할 수 있습니다). 숨겨진 방법으로이 작업을 수행하는 방법을 파악하려고합니다. 이 코드에서는 잘못된 메서드를 재정의합니다. 곧 업데이 트됩니다.


업데이트 :

좋아, 몇 가지 조사 후 나는 최선의 선택이 TouchDelegate와의 ListView의 확장을 결합하는 것입니다 생각합니다.

관련 문제