2010-08-17 128 views
45

我有一個帶有編輯文本和下面的按鈕的ListView。當我點擊一個listView項時,鍵盤出現,並按下編輯文本和按鈕。我想要列表滾動到選定的項目。任何想法?謝謝ListView滾動到選定的項目

+1

看到我的答案在這裏,http://stackoverflow.com/a/29345217/1881527的[編程滾動到一個特定的位置在Android的ListView(HTTP – 2015-04-01 09:52:04

+2

可能重複://計算器。com/questions/7561353 /以編程方式滾動到一個特定位置在Android的列表視圖) – 2016-08-18 18:46:27

回答

4

在您點擊的列表項上設置一個監聽器,然後在單擊時使用View.getTop()View.getBottom()以獲取它在父代中的位置。然後,您可以使用ListView.scrollTo(x, y)滾動到列表項目。

+0

這不適合我。如果我實現你的例子,listView被滾動,但選中的項目不居中。 – Anita 2010-08-17 15:34:17

+1

@Anita:你沒有提到任何關於居中的事情......居中只需要稍作修改。只需按照屏幕高度的比例添加或減少y值即可。 – Doge 2010-08-19 13:11:21

+0

不需要這樣做。 – 2013-08-07 23:59:24

69

您可以使用ListView的setSelection(int position)方法滾動到一行。

+16

這不適合我。我在http://developer.android.com/reference/android/widget/ListView.html#smoothScrollToPosition(int)使用了smoothScrollToPostion(position)。重要說明:在適配器上調用notifyDataSetChanged()後,必須調用它。 – SilentNot 2013-10-02 19:41:22

+1

請注意,這一個將您帶到了這個位置,但在另一個答案中,smoothScrollToPosition實際上在那裏滾動。如果你想讓用戶看到某個東西,這兩者都可以工作,所以這是你想要的樣子。 – 2014-04-28 21:53:17

+0

如何在只有一個項目存在時使listview滾動頂部? – 2016-02-29 08:50:28

4

你應該使用transcript mode

getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL); 
42

您可以使用ListView的smoothScrollToPosition(int position)滾動到列表中的特定位置。

+1

由於此錯誤:https://code.google.com/p/android/issues/detail?id=36062,如果您想要平滑滾動,這實際上是一個更好的解決方法:http://stackoverflow.com/questions/ 14479078/smoothscrolltopositionfromtop-is-not-always-working-like-it-should/20997828#20997828 – nommer 2014-08-04 17:18:08

+0

如上所述,該錯誤似乎特定於smoothScrollToPositionFromTop。不確定它會影響smoothScrollToPosition ...有誰知道嗎? – 2015-02-06 00:30:44

+1

不知道,但我的'smoothScrollToPosition()'似乎並不工作,而'setSelection()'工作;儘管有一個混蛋。 – Darpan 2015-09-22 12:24:34

3

喲可以尋找

listView.setSelectionFromTop(位置,distanceFromHeader);

它將定位在位置處的項目,下面列表視圖

+0

我需要在滾動lisview的同時滾動另一個視圖。使用列表視圖上的setSelectionFromTop滾動阻止使另一個視圖滾動變慢的UI線程。你能提出一些建議如何去做? – VijayRaj 2014-11-27 09:22:00

21

的頂部指定的像素對於直接滾動:

getListView().setSelection(11); 

對於平滑滾動:

getListView().smoothScrollToPosition(11); 

滾動到頂部

getListView().setSelectionAfterHeaderView(); 

注意

試圖調用它的職位,因爲有時當你調用它的方法

getListView().postDelayed(new Runnable() {   
    @Override 
    public void run() { 
     lst.setSelection(15); 
    } 
},100L); 
1

使用尚未創建列表視圖持續時間帶來更好的用戶體驗。使用這個,並添加持續時間。將項目順利滾動到列表視圖的頂部。

int duration = 500; //miliseconds 
int offset = 0;  //fromListTop 

listview.smoothScrollToPositionFromTop(position,offset,duration); 
  • descrease時間,使滾動更快
1

您可以使用

smoothScrollToPosition(position) 

只是增加項目的位置1,你會得到項目的看法。

getListView().smoothScrollToPosition(position + 1);