[英]how to scroll listview to specific position in android programmatically
[英]Programmatically scroll to a specific position in an Android ListView
如何以編程方式滾動到ListView
的特定位置?
例如,我有一個String[] {A,B,C,D....}
,我需要將ListView
的頂部可見項設置為我的String[]
的索引 21。
對於直接滾動:
getListView().setSelection(21);
對於平滑滾動:
getListView().smoothScrollToPosition(21);
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);
干杯!!!
默認情況下, Listview
滾動將定位到頂部,但如果不可見則要滾動,然后使用:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
我已設置 OnGroupExpandListener 並將 onGroupExpand() 覆蓋為:
並使用 setSelectionFromTop() 方法設置所選項目並從 ListView 的頂部邊緣定位選擇 y 像素。 (如果在觸摸模式下,該項目將不會被選中,但仍會被適當定位。)(android 文檔)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
如果有人正在尋找類似 Gmail 應用程序的功能,
默認情況下,Listview 滾動將定位到頂部。 謝謝你的提示。 阿馬爾比特。 減去它。 而已。
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);
使用 UP/Down using.button 處理 listView 滾動
如果有人有興趣使用按鈕處理 listView 向上/向下一行。 然后。
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
這對我有用。 amalBit 和墨爾本洛佩斯的答案組合
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 selection(you pos);
或者你可以用SharedPreference
保存你的位置,當你開始活動時,它會得到偏好並將setSeletion
設置為該 int
- 如果您只想將列表向上\\黎明滾動到特定位置:
myListView.smoothScrollToPosition(i);
- 如果你想在 myListView 中獲取特定項目的位置:
myListView.getItemAtPosition(i);
-還有這個myListView.getVerticalScrollbarPosition(i);
可以幫助你。
祝你好運 :)
您需要做兩件事來精確定義 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);
我發現這個解決方案允許使用兩個不同的按鈕上下滾動。
正如@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);
}
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.