簡體   English   中英

如何使列表視圖可滾動,直到最后一個元素位於屏幕頂部

[英]How to make list view scrollable until the last element is on top of the screen

我正在開發一個需要顯示日歷議程的應用程序,就像本機日歷中的議程一樣。 我有一個列表視圖顯示不同的事件(注意:在問題的上下文中,事件是我的系統的實體)。 我想在這個屏幕上提供一個“今天”按鈕。 當用戶點擊此按鈕時,應該滾動事件,直到當前日期時間表的第一個事件位於屏幕頂部。 當我今天只安排了幾個事件時,問題就出現了 - 很少有人沒有填滿整個屏幕。 然后列表視圖只會滾動,直到日歷中的最后一個事件位於底部。 這通常意味着沒有實現將第一個今天的事件放在首位的預期效果。

有什么建議可以做到這一點? 我想到最后添加一些空白元素,但這似乎是丑陋的解決方法,而且它需要特殊的設備特定計算,它將告訴我要插入多少元素。

編輯
在評論中添加一些代碼請求
實際上我不確定這段代碼會讓任何人感到驚訝,但是:

public void onTodayClicked(View target) {
  // calculate the indexOf. It works and is not related to the question
  if (indexOf >= 0) {
     ListView list = (ListView) findViewById(R.id.events_list_view);
     list.setSelection(indexOf);
  }
}

我不確定布局定義對於回答問題很重要,但如果您這么認為我也可以添加它。

您可以通過兩種方式實現這一目標:

  1. 調用smoothScrollToPositionFromTop方法
  2. 調用setSelectionFromTop方法

使用smoothScroll方法更好,因為它實際上平滑過渡 - 這意味着它真正滾動到它。 唯一的缺點是它只能在API級別11之后才能使用。

setSelectionFromTop方法從API級別1開始工作,但它不是平滑滾動,而是跳轉到該行。

如果您不需要定位到屏幕頂部,只需查看行,您還可以使用smoothScrollToPosition,這是API級別8調用。


如果給這些方法提供位置,即列表中的FIRST ,它們將很好地工作。 (根據你的描述,我認為你可能會計算最后一個位置,但我不能確定)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM