2010-06-24 1 views
10

안드로이드에서 ListView를 처음 볼 수있는 방법을 얻을 수있는 방법이 있습니까?안드로이드에서 첫 번째 보이는보기를 얻는 방법 ListView

어댑터의 첫 번째보기를 백업하는 데이터를 얻을 수 있지만 ListView에서 첫 번째보기를 가져올 수없는 것으로 보입니다.

스크롤 작업이 끝난 후 첫 번째 보이는보기를 변경하고 싶습니다. 보기에 대한 참조를 저장해서는 안된다는 것을 알고 있습니다.

+0

보기가 재활용되었습니다. 특정 견해에 대해 무엇이 필요합니까? –

+0

제 질문을 편집합니다. 사용자가 목록을 스크롤 한 후에보기를 변경하려고합니다. – Janusz

답변

12

사실 ListView 항목은 ListView의 하위 항목입니다. 그래서 먼저 볼 수있는 ListView 항목은 다음과 같습니다

listView.getChildAt(0) 
+0

null에 대한 반환 된 뷰를 조사 할 때 감사드립니다. 활동을 시작하고 때때로 목록에 자녀가없는 경우 스크롤 및 목록 작성이 동시에 발생하는 것 같습니다. – Janusz

+5

이 방법이 잘못되었다고 생각합니다. 로드 된 첫 번째 항목을 가져 오기 때문입니다. 어쩌면 그 항목이 처음으로 보이지 않을 수도 있습니다. 그러나 listView.getFirstVisiblePosition()은 더 좋으며 항상 잘 작동합니다. – NrNazifi

+0

헤더가있는 경우 정확하지 않습니다. –

3

의 ListView가 표시되는 첫 번째보기를 얻을 수있는 기능 getFirstVisiblePosition 정도가, 코드는 다음과 같습니다 실제로

listView.getChildAt(listView.getFirstVisiblePosition());

+7

childAt() 위치와 getFirstVisiblePosition()에 의해 반환되는 위치 사이에는 차이가 있습니다. getFirstVisiblePosition의 위치는 데이터 어댑터의 위치입니다. ChildAt는 순간에 listview에서 볼 수있는 뷰만 고려합니다. – Janusz

+0

나는 대답이 마음에 들었고 뭔가 유용한 것을 발견하는 것이 유용하다는 것을 알았다. 그러나 어댑터 위치에서 childAt를 사용하면 작동하지 않습니다. fetFirstVisiblePosition을 사용하면 getItem을 사용하여 다시 어댑터에 전달해야합니다. 그래서 더 정확한 adapter.getItem (listview.getFirstVisiblePosition) 것입니다. 그러나이 경우 op가 요청한대로보기가 없습니다. 그럼에도 불구하고 이것을 지적 해 주셔서 감사합니다. –

3

listView.getChildAt(listView.getFirstVisiblePosition()) 표시되는 첫 번째 항목을 제공
하지만 반값으로 표시 될 수 있습니다 목록 항목.

첫번째 완전히 보이는 목록 항목을 얻으려면,

if (listView.getChildAt(0).getTop() < 0) { 
    int firstCompletelyVisiblePos = listView.getFirstVisiblePosition() + 1; 
} 
0

다음과 같은 코드를 사용할 수 있습니다

for (int i = 0; i <= conversationListView.getLastVisiblePosition() - conversationListView.getFirstVisiblePosition(); i++) { 
     View listItem = conversationListView.getChildAt(i); 
} 
0

listView.scrollBy (0, -40);

매우 잘 작동합니다.