如何使列表视图可滚动,直到最后一个元素位于屏幕顶部

时间:2011-12-29 14:47:49

标签: android android-listview android-scroll

我正在开发一个需要显示日历议程的应用程序,就像本机日历中的议程一样。我有一个列表视图显示不同的事件(注意:在问题的上下文中,事件是我的系统的实体)。我想在这个屏幕上提供一个“今天”按钮。当用户点击此按钮时,应该滚动事件,直到当前日期时间表的第一个事件位于屏幕顶部。当我今天只安排了几个事件时,问题就出现了 - 很少有人没有填满整个屏幕。然后列表视图只会滚动,直到日历中的最后一个事件位于底部。这通常意味着没有实现将第一个今天的事件放在首位的预期效果。

有关如何做到这一点的任何建议?我想到最后添加一些空白元素,但这看起来很丑陋,而且还需要特殊的特定于设备的计算,告诉我要插入多少元素。

修改
根据评论中的要求添加一些代码
实际上我不确定这段代码会让任何人感到惊讶,但是:

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 个答案:

答案 0 :(得分:0)

您可以通过两种方式实现这一目标:

  1. 致电smoothScrollToPositionFromTop方法
  2. 致电setSelectionFromTop方法
  3. 使用smoothScroll方法更好,因为它实际上平滑过渡 - 这意味着它真正滚动到它。 唯一的缺点是它仅在API级别11之后可用。

    setSelectionFromTop方法自API级别1开始工作,但它不是平滑滚动,而是跳转到该行。

    如果您不需要定位到屏幕顶部,只需查看该行,您还可以使用smoothScrollToPosition,这是API级别8调用。


    如果您为这些方法提供位置,即列表中的 FIRST ,它们将运行良好。 (根据你的描述,我认为你可能会计算最后一个位置,但我无法确定)。