2010-11-24 2 views
3

나는 다른 뷰와 그 중 ListView을 포함하는 LinearLayout을 가지고 있습니다. 이보기는 버튼을 클릭하여 다른보기에서로드됩니다.안드로이드리스트보기 scrollTo

이 단추는 어떻게 ListView에서 어떤 요소가 목록에서 처음으로 표시되어야하는지 지정합니다. 목록을 채우는 요소는 외부 서버에서 HTTP를 통해 검색됩니다.

문제는 N 번째 요소를 목록에서 첫 번째로 가져올 수 있다는 것입니다. 참고 : 현재 위치에서 새 위치로 이동하고 싶지는 않습니다. 목록을 스크롤하고 싶습니다.

나는 setSelected()scrollTo(x,y)scrollBy(x,y)으로 시도했지만 행운은 없습니다. 그대로

는 또한 추악한로,이 코드 파이스 동전을 시도했다,하지만 난 그냥 일하는 그것을 f를 원했고 :

ListView categoryList = (ListView)findViewById(R.id.category_list); 
     categoryList.post(new Runnable() { 
      @Override 
      public void run() { 
       Log.d(this.getClass().getName(), "CategoryActivity.scrollToIndex: " + CategoryActivity.scrollToIndex); 
       if(CategoryActivity.scrollToIndex>0){ 
        ListView categoryList = (ListView)findViewById(R.id.category_list); 
        categoryList.setScrollContainer(true); 
        categoryList.scrollTo(4, CategoryActivity.scrollToIndex * 50); 
        categoryList.requestLayout(); 

       } 
      } 
     }); 

을 그리고 이것은 나에게 약간의 성공을 만들었지 만의 ListView 그 때 행동하고 있었다 미친 것 나는 심지어 기술 할 수 없다. ...

어떤 생각?

답변

4

그것은이있는 ScrollView에 나를 위해 일한 메시지 큐

categoryList.post(new Runnable() { 
    public void run() { 
     categoryList.scrollTo(4, CategoryActivity.scrollToIndex * 50); 
    } 
}); 

(check this answer)에 추가하십시오.

+0

감사합니다. – 0m4r

+0

또한 setSelected를 시도해 보았지만 너무 효과가있었습니다. 그래서, 내 문제에 대한 해결책을 찾았습니다! 내가 분명히 이해하지 못했던 것은 이것이 왜 효과가 있는지입니다 : / – 0m4r

2

나는 목록보기 스크롤을 위해 다른 사람들에게 유용 할 수있는 기능을 만들었고 모든 안드로이드 버전, 에뮬레이터 및 장치에서 나를 위해 작동합니다. 여기서 itemheight는 listview의 고정 된보기 높이입니다.

int itemheight=60; 
public void scrollToY(int position) 
{ 
    int item=(int)Math.floor(position/itemheight); 
    int scroll=(int) ((item*itemheight)-position); 
    this.setSelectionFromTop(item, scroll);// Important 
} 
public void scrollByY(int position) 
{ 
    position+=getListScrollY(); 
    int item=(int)Math.floor(position/itemheight); 
    int scroll=(int) ((item*itemheight)-position); 
    this.setSelectionFromTop(item, scroll);// Important 
} 
public int getListScrollY() 
{ 
    try{ 
    //int tempscroll=this.getFirstVisiblePosition()*itemheight;// Important 
    View v=this.getChildAt(0); 
    int tempscroll=(this.getFirstVisiblePosition()*itemheight)-v.getTop();// Important 
    return tempscroll; 
    }catch(Exception e){} 
    return 0; 
} 
관련 문제