Как программно прокручивать до определенной позиции в ListView
?
Например, у меня есть String[] {A,B,C,D....}
, и мне нужно установить верхний видимый элемент ListView
на индекс 21 моего String[]
.
Как программно прокручивать до определенной позиции в ListView
?
Например, у меня есть String[] {A,B,C,D....}
, и мне нужно установить верхний видимый элемент ListView
на индекс 21 моего String[]
.
Для прямой прокрутки:
getListView().setSelection(21);
Для гладкой прокрутки:
getListView().smoothScrollToPosition(21);
getListView().smoothScrollToPositionFromTop(position,offset,duration);
Параметры
position → Позиция для прокрутки до
offset ---- > Желаемое расстояние в пикселях позиции вверху представления при завершении прокрутки
duration- > Число миллисекунд, используемых для прокрутки
Примечание. От API 11.
Ответ HandlerExploit был тем, что я искал, но мой список довольно длинный, а также с помощью скроллера алфавита. Затем я обнаружил, что одна и та же функция может принимать и другие параметры:)
Изменить: (из предложения AFD)
Чтобы поместить текущий выбор:
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
Поместите свой код в обработчик следующим образом:
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);
}
а затем вызовите этот метод, например,
timerDelayRunForScroll(100);
CHEERS!!!
Я установил OnGroupExpandListener и переопределит onGroupExpand() как:
и используйте метод setSelectionFromTop(), который Устанавливает выбранный элемент и позиционирует выбор y пикселей из верхнего края ListView. (Если в сенсорном режиме элемент не будет выбран, но он будет по-прежнему размещаться соответствующим образом.) (Android docs)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
Прокрутка Listview
по умолчанию будет располагаться сверху, но вам нужно прокрутить, если она не видна, затем используйте это:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
Обработка прокрутки listView с помощью кнопки UP/Down using.button
Если кто-то заинтересован в обработке listView одной строки вверх/вниз с помощью кнопки. Затем.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Если кто-то ищет аналогичную функциональность, такую как приложение Gmail,
Прокрутка Listview по умолчанию будет располагаться сверху. Спасибо за подсказку. amalBit. Просто вычтите его. Что это.
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);
Если вы хотите перейти непосредственно в нужную позицию в спискеView, просто используйте
listView.setSelection(int position);
и если вы хотите плавно перейти в нужную позицию в спискеView, просто используйте
listView.smoothScrollToPosition(int position);
Это то, что сработало для меня. Сочетание ответов 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);
}
а затем вызовите этот метод следующим образом:
timerDelayRunForScroll(400);
Я нашел это решение, чтобы прокрутка вверх и вниз с помощью двух разных кнопок.
Как было предложено @Nepster, я реализую прокрутку программно, используя getFirstVisiblePosition() и getLastVisiblePosition(), чтобы получить текущую позицию.
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);
}
}
});
}