2010-08-17 32 views
45

Tôi có một ListView với một văn bản chỉnh sửa và một nút bên dưới nó. Khi tôi nhấp vào một mục listView, bàn phím xuất hiện và đẩy lên văn bản chỉnh sửa và nút. Tôi muốn danh sách cuộn đến mục đã chọn. Bất kỳ ý tưởng? Cảm ơnDanh sáchXem cuộn đến mục đã chọn

+1

xem câu trả lời của tôi ở đây, http://stackoverflow.com/a/29345217/1881527 –

+2

trùng lặp có thể xảy ra của [Lập trình di chuyển đến một vị trí cụ thể trong một ListView Android] (http: // stackoverflow.com/questions/7561353/programmatically-scroll-to-a-specific-position-in-an-android-listview) –

Trả lời

4

Thiết lập trình nghe trên mục danh sách của bạn được nhấp, sau đó sử dụng View.getTop() hoặc View.getBottom() khi được nhấp để nhận vị trí của nó trong phụ huynh. Sau đó, bạn có thể sử dụng ListView.scrollTo(x, y) để cuộn đến mục danh sách.

+0

Điều này không hiệu quả đối với tôi. Nếu tôi triển khai ví dụ của bạn thì listView được cuộn nhưng mục đã chọn không được căn giữa. – Anita

+1

@Anita: Bạn không nói gì về việc định tâm ... việc định tâm chỉ có một sửa đổi nhỏ. Chỉ cần thêm hoặc giảm giá trị y tương ứng với chiều cao màn hình. – Doge

+0

Không cần phải làm điều này tho '. –

69

Bạn có thể sử dụng phương pháp setSelection(int position) của ListView để cuộn đến một hàng.

+16

Điều này không hiệu quả đối với tôi. Tôi đã sử dụng smoothScrollToPostion (vị trí) tại http://developer.android.com/reference/android/widget/ListView.html#smoothScrollToPosition (int). Lưu ý quan trọng: Tôi đã phải gọi nó sau khi notifyDataSetChanged() đã được gọi trên bộ điều hợp. – SilentNot

+1

Lưu ý, điều này mang đến cho bạn vị trí, nhưng như trong câu trả lời khác, smoothScrollToPosition thực sự cuộn ở đó. Cả hai hoạt động nếu bạn muốn người dùng được hiển thị một cái gì đó vì vậy nó là một vấn đề làm thế nào bạn muốn nó nhìn. –

+0

cách tạo thanh cuộn danh sách xem khi chỉ có một mục tồn tại? –

4

Bạn nên sử dụng transcript mode:

getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL); 
42

Bạn có thể sử dụng ListView của smoothScrollToPosition(int position) để di chuyển đến một địa điểm cụ thể trong danh sách.

+1

vì lỗi này: https://code.google.com/p/android/issues/detail?id=36062, đây thực sự là giải pháp tốt hơn nếu bạn muốn cuộn trơn tru: http://stackoverflow.com/questions/ 14479078/smoothscrolltopositionfromtop-is-not-always-working-like-it-should/20997828 # 20997828 – nommer

+0

Lỗi đó, như được mô tả, có vẻ như cụ thể đối với smoothScrollToPositionFromTop. Không chắc chắn nó ảnh hưởng đến smoothScrollToPosition ... không ai biết? –

+1

Không biết, nhưng tại thời điểm 'smoothScrollToPosition()' của tôi dường như không hoạt động, trong khi 'setSelection()' hoạt động; mặc dù với một giật. – Darpan

3

Yo có thể nhìn Đối

listView.setSelectionFromTop (vị trí, distanceFromHeader);

Nó sẽ xác định vị trí các mục ở vị trí, pixel quy định dưới đây phía trên cùng của listview

+0

Tôi cần cuộn một chế độ xem khác cùng lúc trong khi cuộn lisview. Sử dụng setSelectionFromTop trên listview để di chuyển khối giao diện người dùng mà làm cho di chuyển của chế độ xem khác chậm. Bạn có thể đưa ra một số gợi ý làm thế nào để làm điều đó? – VijayRaj

21

Đối với một cuộn trực tiếp:

getListView().setSelection(11); 

Đối với một cuộn trơn tru:

getListView().smoothScrollToPosition(11); 

Để Di chuyển đến đầu trang

getListView().setSelectionAfterHeaderView(); 

Note

cố gắng để gọi nó trong bài viết vì đôi khi listview vẫn chưa tạo ra trong khi bạn gọi đó là phương pháp

getListView().postDelayed(new Runnable() {   
    @Override 
    public void run() { 
     lst.setSelection(15); 
    } 
},100L); 
1

Sử dụng thời lượng mang lại trải nghiệm người dùng tốt hơn. Sử dụng điều này, với thời gian thêm vào. Sẽ cuộn mục ở vị trí thuận lợi lên đầu danh sách xem.

int duration = 500; //miliseconds 
int offset = 0;  //fromListTop 

listview.smoothScrollToPositionFromTop(position,offset,duration); 
  • thời gian descrease để làm cho di chuyển nhanh hơn
1

Bạn có thể sử dụng

smoothScrollToPosition(position) 

Chỉ cần tăng vị trí của mục với 1, và bạn sẽ nhận được quan điểm của item.

getListView().smoothScrollToPosition(position + 1); 
Các vấn đề liên quan