Як я можу програмно прокручуватися до певної позиції у ListView
?
Наприклад, у мене є String[] {A,B,C,D....}
, і мені потрібно встановити верхній видимий елемент ListView
в індекс 21 мого String[]
.
Як я можу програмно прокручуватися до певної позиції у ListView
?
Наприклад, у мене є String[] {A,B,C,D....}
, і мені потрібно встановити верхній видимий елемент ListView
в індекс 21 мого String[]
.
Відповіді:
Для прямого прокручування:
getListView().setSelection(21);
Для плавного прокручування:
getListView().smoothScrollToPosition(21);
smoothScrollToPosition
не працює, будь-яка пропозиція?
listView.post(() -> listView.smoothScrollToPosition());
getListView().smoothScrollToPositionFromTop(position,offset,duration);
Параметри
положення -> Положення для прокрутки до
зміщення ----> Бажана відстань у пікселях положення від верху огляду, коли прокрутка закінчилася
тривалість-> Кількість мілісекунд, яку потрібно використати для прокрутки
Примітка. Від API 11.
Відповідь HandlerExploit полягала в тому, що я шукав, але Мій перегляд досить тривалий, а також з алфавітом прокрутки. Тоді я виявив, що ця ж функція може приймати й інші параметри :)
Редагувати: (із пропозиції AFDs)
Щоб розмістити поточний вибір:
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);
ВЕЛИКИ !!!
Я встановив OnGroupExpandListener і замінив onGroupExpand () як:
і використовувати метод setSelectionFromTop (), який встановлює вибраний елемент і розміщує виділені y пікселі з верхнього краю ListView. (Якщо в режимі дотику, елемент не буде обраний, але він все ще буде розташований належним чином.) (Андроїд документи)
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);
Якщо хтось шукає подібну функціональність, як додаток 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);
Обробка спискуПерегляд прокрутки за допомогою кнопок Вгору / Вниз
Якщо хтось зацікавлений в обробці списку, перегляньте один рядок вгору / вниз за допомогою кнопки. тоді.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Це те, що працювало для мене. Поєднання відповідей від 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);
його легкий вибір list-view.set (ви позуєте); або ви можете зберегти свою позицію за допомогою спільної презентаціїі, коли ви розпочали діяльність, отримайте налаштування та встановіть вибір до цього int
-Якщо ви хочете, щоб список прокручувався вгору \ світанку до певної позиції:
myListView.smoothScrollToPosition(i);
-якщо ви хочете отримати позицію певного елемента в myListView:
myListView.getItemAtPosition(i);
-так, це myListView.getVerticalScrollbarPosition(i);
може вам допомогти.
Щасти :)
Щоб точно визначити положення прокрутки listView, потрібно дві речі:
Щоб отримати поточний списокПерегляд прокрутки:
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
Щоб встановити listView position прокрутки:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);
Я знайшов це рішення, щоб дозволити прокручування вгору та вниз за допомогою двох різних кнопок.
Як запропонував @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);
}
}
});
}