Intereting Posts
Как изменить размер захваченного изображения перед сохранением в sdcard? Горизонтальная прокрутка в сетке андроида SimpleDateFormat (шаблон String, локаль Locale), например, Locale.US для дат ASCII Android: реализация двухстороннего бесконечного просмотра Альфа-фон на FAB нажал GetView возвращает null, когда фрагмент был создан из активности Android: Как правильно инициализировать проигрыватель YouTube внутри себя? Преобразование 2-строкового массива в ArrayList в android Как исправить ошибку «Ошибка создания окончательного архива: найденный дубликат файла для APK: doc / allclasses-frame.html» Как получить чешское название месяца Как правильно проверить целостность токена Google? Проверьте наличие установленных приложений Google Analytics обнаруживает тесты Лаборатории Google Cloud Test как активных пользователей и новых пользователей SetEnabled () vs setClickable (), в чем разница? Изнашивание проекта – attr 'android: windowSwipeToDismiss'

Программно перейдите к определенной позиции в 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 —-> Желаемое расстояние в пикселях позиции сверху окна при завершении прокрутки
Duration-> Число миллисекунд, которое нужно использовать для прокрутки

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

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


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

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

 int h1 = mListView.getHeight(); int h2 = v.getHeight(); mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration); 

Я установил 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 } }); 

Поместите свой код в обработчик следующим образом:

 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 !!!

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

В Recycleview:

Если вы хотите перейти непосредственно к нужному индексу или положению, просто используйте

 NamLysVar.scrollToPosition(int GtoIdxPosVal); 

Если вы хотите плавно перейти к желаемому индексу или положению

 NamLysVar.smoothScrollToPosition(int GtoIdxPosVal); 

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

Как было предложено @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); } } }); } 

Это то, что сработало для меня. Сочетание ответов 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);