Làm thế nào tôi có thể lập trình cuộn đến một vị trí cụ thể trong một ListView
?
Ví dụ: tôi có một String[] {A,B,C,D....}
và tôi cần đặt mục hiển thị trên cùng của ListView
chỉ mục 21 của tôi String[]
.
Làm thế nào tôi có thể lập trình cuộn đến một vị trí cụ thể trong một ListView
?
Ví dụ: tôi có một String[] {A,B,C,D....}
và tôi cần đặt mục hiển thị trên cùng của ListView
chỉ mục 21 của tôi String[]
.
Câu trả lời:
Đối với một cuộn trực tiếp:
getListView().setSelection(21);
Để cuộn mượt:
getListView().smoothScrollToPosition(21);
smoothScrollToPosition
không hoạt động, có đề nghị nào không?
listView.post(() -> listView.smoothScrollToPosition());
getListView().smoothScrollToPositionFromTop(position,offset,duration);
Vị trí tham số -> Vị trí để cuộn để
bù ----> Khoảng cách mong muốn tính bằng pixel của vị trí từ đỉnh của chế độ xem khi cuộn kết thúc
thời lượng-> Số mili giây để sử dụng cho cuộn
Lưu ý: Từ API 11.
Câu trả lời của HandlerExploit là những gì tôi đang tìm kiếm, nhưng listview của tôi khá dài và cũng có bộ lọc bảng chữ cái. Sau đó, tôi thấy rằng chức năng tương tự cũng có thể có các tham số khác :)
Chỉnh sửa: (Từ đề xuất của AFD)
Để định vị lựa chọn hiện tại:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
Đặt mã của bạn trong xử lý như sau,
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
lstView.smoothScrollToPosition(YOUR_POSITION);
} catch (Exception e) {}
}
}, time);
}
và sau đó gọi phương thức này như,
timerDelayRunForScroll(100);
GIÁ RẺ !!!
Tôi đã đặt OngroupExpandListener và ghi đè ongroupExpand () là:
và sử dụng phương thức setSelectionFromTop () để đặt mục đã chọn và định vị các pixel y được chọn từ cạnh trên của ListView. (Nếu ở chế độ cảm ứng, vật phẩm sẽ không được chọn nhưng nó vẫn sẽ được định vị thích hợp.) (Tài liệu android)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
Các Listview
cuộn sẽ được bố trí để đầu theo mặc định, nhưng muốn cuộn nếu không nhìn thấy được sau đó sử dụng này:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
Nếu ai đó đang tìm kiếm một chức năng tương tự như ứng dụng Gmail,
Cuộn Listview sẽ được định vị lên đầu theo mặc định. Cảm ơn đã gợi ý. amalBit. Chỉ cần trừ nó. Đó là nó.
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
int h1 = mDrawerList.getHeight();
int h2 = header.getHeight();
mDrawerList.smoothScrollToPosition(h2-h1);
}
}, 1000);
Xử lý danh sách Xem cuộn bằng cách sử dụng LÊN / Xuống bằng cách sử dụng.
Nếu ai đó quan tâm đến việc xử lý danh sách Xem một hàng lên / xuống bằng nút. sau đó.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Đây là những gì làm việc cho tôi. Kết hợp các câu trả lời của amalBit & Melbourne Lopes
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.smoothScrollToPositionFromTop(YOUR_POSITION, h1/2 - h2/2, 500);
} catch (Exception e) {}
}
}, time);
}
và sau đó gọi phương thức này như:
timerDelayRunForScroll(400);
lựa chọn list-view.set dễ dàng của nó (bạn đặt ra); hoặc bạn có thể lưu vị trí của mình với sharedprefrenceand khi bạn bắt đầu hoạt động, nó nhận được các ưu tiên và thiết lập cho int đó
-Nếu bạn chỉ muốn danh sách cuộn lên \ bình minh đến một vị trí cụ thể:
myListView.smoothScrollToPosition(i);
-Nếu bạn muốn có được vị trí của một mục cụ thể trong myListView:
myListView.getItemAtPosition(i);
-cũng điều này myListView.getVerticalScrollbarPosition(i);
có thể giúp bạn.
Chúc may mắn :)
Bạn cần hai điều để xác định chính xác vị trí cuộn của listView:
Để có được danh sách hiện tại Xem vị trí cuộn:
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
Để đặt vị trí listView Scroll:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);
Tôi tìm thấy giải pháp này để cho phép cuộn lên xuống bằng hai nút khác nhau.
Theo đề xuất của @Nepster, tôi triển khai cuộn theo chương trình bằng cách sử dụng getFirstVisiblePocation () và getLastVisiblePocation () để có được vị trí hiện tại.
final ListView lwresult = (ListView) findViewById(R.id.rds_rdi_mat_list);
.....
if (list.size() > 0) {
ImageButton bnt = (ImageButton) findViewById(R.id.down_action);
bnt.setVisibility(View.VISIBLE);
bnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(lwresult.getLastVisiblePosition()<lwresult.getAdapter().getCount()){
lwresult.smoothScrollToPosition(lwresult.getLastVisiblePosition()+5);
}else{
lwresult.smoothScrollToPosition(lwresult.getAdapter().getCount());
}
}
});
bnt = (ImageButton) findViewById(R.id.up_action);
bnt.setVisibility(View.VISIBLE);
bnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(lwresult.getFirstVisiblePosition()>0){
lwresult.smoothScrollToPosition(lwresult.getFirstVisiblePosition()-5);
}else{
lwresult.smoothScrollToPosition(0);
}
}
});
}