Программно перейдите к определенной позиции в Android ListView

Как я могу программно прокручивать до определенной позиции в ListView ?

Например, у меня есть String[] {A,B,C,D....} , и мне нужно установить верхний видимый элемент ListView в индекс 21 моей String[] .

Для прямого прокрутки:

 getListView().setSelection(21); 

Для плавного прокрутки:

 getListView().smoothScrollToPosition(21); 

Для SmoothScroll с длительностью прокрутки:

getListView().smoothScrollToPositionFromTop(position,offset,duration);

параметры
position -> Позиция для прокрутки до
offset —-> Желаемое расстояние в пикселях позиции сверху windows при завершении прокрутки
duration-> Число миллисекунд, которое нужно использовать для прокрутки

Примечание: из API 11.

Ответ HandlerExploit был тем, что я искал, но мой список довольно длинный, а также с помощью скроллера алфавита. Тогда я обнаружил, что одна и та же функция может принимать и другие параметры 🙂


Изменить: (из предложения AFD)

Чтобы поместить текущий выбор:

 int h1 = mListView.getHeight(); int h2 = listViewRow.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);

и если вы хотите плавно перейти в нужную позицию в ListView, просто используйте

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); 

его легкий список-view.set выбор (вы pos); или вы можете сохранить свою позицию с помощью sharedprefrenceand, когда вы начинаете работу, он получает предпочтения и setseletion для этого int

Я нашел это решение, чтобы прокручивать вверх и вниз с помощью двух разных кнопок.

Как было предложено @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()0){ lwresult.smoothScrollToPosition(lwresult.getFirstVisiblePosition()-5); }else{ lwresult.smoothScrollToPosition(0); } } }); } 
  • Цвет монитора ListView для Android
  • Цикл для загрузки изображений в виде списка по одному
  • Как получить выбранные элементы из списка Multi Select List
  • удалить несколько элементов в пользовательском listview
  • notifyDataSetChanged () делает обновление списка и прокручивает подсказки назад
  • Отображение текущего выбора в списке
  • Множественный выбор в пользовательском ListView с CAB
  • Push Listview, когда клавиатура появляется без настройкиPan
  • Как я могу обновить одну строку в ListView?
  • Android получает точную позицию прокрутки в ListView
  • Android: кнопка «Радио» в пользовательском списке
  • Давайте будем гением компьютера.