我正在开发一个需要显示日历议程的应用程序,就像本机日历中的议程一样。我有一个列表视图显示不同的事件(注意:在问题的上下文中,事件是我的系统的实体)。我想在这个屏幕上提供一个“今天”按钮。当用户点击此按钮时,应该滚动事件,直到当前日期时间表的第一个事件位于屏幕顶部。当我今天只安排了几个事件时,问题就出现了 - 很少有人没有填满整个屏幕。然后列表视图只会滚动,直到日历中的最后一个事件位于底部。这通常意味着没有实现将第一个今天的事件放在首位的预期效果。
有关如何做到这一点的任何建议?我想到最后添加一些空白元素,但这看起来很丑陋,而且还需要特殊的特定于设备的计算,告诉我要插入多少元素。
修改:
根据评论中的要求添加一些代码
实际上我不确定这段代码会让任何人感到惊讶,但是:
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);
}
}
我不确定布局定义对于回答问题很重要,但如果您这么认为我也可以添加它。
答案 0 :(得分:0)
您可以通过两种方式实现这一目标:
使用smoothScroll方法更好,因为它实际上平滑过渡 - 这意味着它真正滚动到它。 唯一的缺点是它仅在API级别11之后可用。
setSelectionFromTop方法自API级别1开始工作,但它不是平滑滚动,而是跳转到该行。
如果您不需要定位到屏幕顶部,只需查看该行,您还可以使用smoothScrollToPosition,这是API级别8调用。
如果您为这些方法提供位置,即列表中的 FIRST ,它们将运行良好。 (根据你的描述,我认为你可能会计算最后一个位置,但我无法确定)。