如何以編程方式滾動到ListView
中的特定位置?以編程方式滾動到Android ListView中的特定位置
例如,我有一個String[] {A,B,C,D....}
,我需要將ListView
的頂部可見項目設置爲我的String[]
的索引21。
如何以編程方式滾動到ListView
中的特定位置?以編程方式滾動到Android ListView中的特定位置
例如,我有一個String[] {A,B,C,D....}
,我需要將ListView
的頂部可見項目設置爲我的String[]
的索引21。
我已設置OnGroupExpandListener並覆蓋onGroupExpand()爲:
並使用setSelectionFromTop()方法,該方法 設置選定的項目並將選擇的y像素從ListView的頂部邊緣放置。 (如果在觸摸模式中,項將不被選擇,但它仍然會被適當地定位。)(機器人文檔)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
我需要在滾動lisview的同時滾動另一個視圖。使用列表視圖上的setSelectionFromTop滾動阻止使另一個視圖滾動變慢的UI線程。你能提出一些建議如何去做? – VijayRaj
getListView().smoothScrollToPositionFromTop(position,offset,duration);
參數
位置 - >滾動到
的位置 偏移量---->滾動結束時距離視圖頂部的位置的像素距離
duration->的毫秒數時滾動
注:從API 11
HandlerExploit的答案是什麼,我一直在尋找,但我的列表視圖是相當漫長的,也有字母滾動。後來我發現,同樣的功能可以採取其他參數,以及:)
編輯:(從AFD中建議)
放置當前選擇:
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);
}
和t母雞叫這種方法,
timerDelayRunForScroll(100);
CHEERS !!!
使用上/下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.
}
});
我發現這個解決方案允許使用兩個不同的按鈕向上和向下滾動。
正如@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);
}
}
});
}
如果有人找像Gmail應用程序類似的功能,
的列表視圖滾動將被定位在默認情況下到上。感謝提示。 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位置);
,如果你想順利跳轉到ListView中所需的位置只使用
listView.smoothScrollToPosition(INT位置);
這是我工作的。通過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);
的Listview
滾動將被定位在默認情況下到上,而是要滾動,如果不可見的再使用此:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
謝謝@zalak解決我的問題,給你 –
其易 list-view.set selection(you pos); 或者你可以保存你的位置與sharedprefrence和當你開始活動 它得到的喜好和setseletion該int
可能重複[是否有可能滾動ListView到Listrow的子元素?](http://stackoverflow.com/questions/6626988/is-it-it-it-it-scroll-listview-to-a-listrows-child-element) –
看到我的答案在這裏,http://stackoverflow.com/a/29345217/1881527 –