如何以编程方式滚动到ListView
?
例如,我有一个String[] {A,B,C,D....}
,我需要将ListView
的顶部可见项目设置为String[]
的索引21。
答案 0 :(得分:370)
直接滚动:
getListView().setSelection(21);
顺畅滚动:
getListView().smoothScrollToPosition(21);
答案 1 :(得分:60)
getListView().smoothScrollToPositionFromTop(position,offset,duration);
参数
位置 - >滚动到
的位置 offset ---->滚动结束时从视图顶部开始的位置像素的所需距离
duration->用于滚动的毫秒数
注意:来自API 11。
HandlerExploit的回答是我正在寻找的,但是我的列表视图非常冗长,并且还带有字母滚动条。然后我发现同样的函数也可以采用其他参数:)
编辑(来自AFDs建议)
定位当前选择:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
答案 2 :(得分:9)
将您的代码置于处理程序中,如下所示,
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 !!!
答案 3 :(得分:6)
我已设置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
}
});
答案 4 :(得分:6)
默认情况下,Listview
滚动条将定位到顶部,但如果不可见则要滚动,请使用此选项:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
答案 5 :(得分:4)
使用UP / Down using.button处理listView滚动
如果有人有兴趣使用按钮向上/向下处理listView一行。然后
indt[, `:=`(eval(paste(splitCols, "orig", sep = "_")), lapply(splitCols, function(x) indt[[x]]))]
答案 6 :(得分:4)
如果有人在寻找类似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);
答案 7 :(得分:3)
如果您想直接跳转到listView中的所需位置,请使用
listView.setSelection(int position);
如果你想在listView中顺利跳转到所需的位置,只需使用
listView.smoothScrollToPosition(int position);
答案 8 :(得分:3)
这对我有用。 amalBit&amp;的答案组合墨尔本洛佩斯
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);
答案 9 :(得分:1)
答案 10 :(得分:1)
-如果只希望列表向上滚动\黎明到特定位置:
myListView.smoothScrollToPosition(i);
-如果要获取特定项目在myListView中的位置:
myListView.getItemAtPosition(i);
-此myListView.getVerticalScrollbarPosition(i);
也会为您提供帮助。
祝你好运:)
答案 11 :(得分:0)
您需要两件事来精确定义listView的滚动位置:
要获取当前listView滚动位置:
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
设置listView滚动位置:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);
答案 12 :(得分:-1)
我发现这个解决方案允许使用两个不同的按钮上下滚动。
正如@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);
}
}
});
}