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

Android 如何使列表视图可滚动,直到最后一个元素位于屏幕顶部,android,android-listview,android-scroll,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);
  }
}

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

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

  • 调用方法
  • 调用方法
  • 使用smoothScroll方法更好,因为它实际上平滑地进行转换-这意味着它确实会滚动到它。 唯一的缺点是它只在API级别11之后才可用

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

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



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

    谢谢您的回答。然而,我没有在我的处置设备支持超过姜饼(Api 9-10级)。也许稍后我会在模拟器中测试您的建议,以便为将来的读者验证您的建议,但这肯定不能解决我的问题。由于你自愿尝试为旧版本找出一些东西,而我自己也没有什么想法,如果你能进一步帮助我,我将不胜感激。我刚刚有机会测试一下你的建议。遗憾的是,你似乎误解了我的要求。你提出的方法确实可以滚动,但我已经有了。我的问题是:假设我有很多项目,比如说1000项。如果我说滚动到第40个,一切都很好,它会显示在屏幕顶部。但是,如果我说“滚动到9999”,它只会滚动直到该项目可见,而不会将其放在顶部。原因是线性布局后不存在空白(可能?)。我需要把每件东西都放在上面。哦,好吧,我误解了。然而,不幸的是,使用ListView无法完成您想要做的事情。您可以做的是,计算必要的高度(使用getFirstVisiblePosition()、getChildAtIndex()和getTop()方法),然后在列表末尾插入一行。但这并不容易,因为你必须处理好几件事。你现在如何进行滚动?你能发一些代码吗?