4

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

任何建议如何做到这一点?我曾想过在最后添加一些空白元素,但这似乎很难解决,而且它需要特殊的设备特定计算来告诉我要插入多少元素。

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

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);
  }
}

我不确定布局定义对于帮助回答问题是否重要,但如果你这么认为,我也可以添加它。

4

1 回答 1

0

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

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

使用 smoothScroll 方法会更好,因为它实际上会平滑过渡——这意味着它真的会滚动到它。唯一的缺点是它仅在 API 级别 11 之后可用。

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

如果你不需要定位到屏幕顶部,只查看行,你也可以使用smoothScrollToPosition,这是一个API 8级的调用。


如果你给这些方法一个位置,也就是列表中的第一个,它们会很好地工作。(根据您的描述,我认为您可能会计算出最后一个位置,但我不能确定)。

于 2011-12-29T20:09:28.310 回答