以编程方式滚动到Android ListView中的特定位置
我怎样才能以编程方式滚动到ListView
的特定位置?
例如,我有一个String[] {A,B,C,D....}
,我需要将ListView
的顶部可见项设置为我的String[]
的索引21。
对于直接滚动:
getListView().setSelection(21);
为了顺利滚动:
getListView().smoothScrollToPosition(21);
对于具有滚动持续时间的SmoothScroll:
getListView().smoothScrollToPositionFromTop(position,offset,duration);
参数
位置 – >滚动到的位置
偏移—->当滚动完成时,距视图顶部位置的所需距离(以像素为单位)
duration->用于滚动的毫秒数
注意:从API 11。
HandlerExploit的答案是我正在寻找,但我的列表视图是相当冗长,也与字母滚动。 然后我发现相同的function也可以采取其他参数:)
编辑:(从AFD的build议)
定位当前select:
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);
干杯!!!
我已经设置OnGroupExpandListener并覆盖onGroupExpand()为:
并使用setSelectionFromTop()方法设置所选项目,并从ListView的顶部边缘selecty像素。 (如果在触摸模式下,该项目将不会被选中,但仍然会被正确定位。)(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);
使用UP / Down using.button处理listView滚动
如果有人有兴趣处理listView一行上/下使用button。 然后。
public View.OnClickListener onChk = new View.OnClickListener() { public void onClick(View v) { int index = list.getFirstVisiblePosition(); getListView().smoothScrollToPosition(index+1); // For increment. } });
如果有人正在寻找类似Gmail应用程序的function,
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);
如果你想直接跳到一个listView中的所需位置,只需使用
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);
我发现这个解决scheme允许使用两个不同的button向上和向下滚动。
正如@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); } } }); }