0

我正在创建一个日历。这是一个包含日期和事件的相当简单的日历。该设计要求日历是 ListView 其中

date
     event
     event
     event
     event
     event
     event
date
     event
     event
     event
     event
     event
     event
     event
date
     event
     event
….

唯一的问题是最上面的日期必须始终可见。它不能滚动出屏幕。除非下一个日期到达顶部,它现在必须成为顶部日期并保持可见,直到序列中的下一个日期取代它。

所以对于我的设计,我有一个带有两个子视图的 RelativeLayout:一个 TextView 和一个 ListView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F0F1F3"
    tools:context=".MyAppActivity" >

    <TextView …/>
    <ListView … />
</RelativeLayout>

然后在MyAppActivity.javasetOnScrollListener用来跟踪滚动以便知道何时将我的 TextView 中的值设置为最高日期。通过使用 TextView,我确保顶部日期始终可见。

但问题如下。如果当前的最高日期是 date1,下一个日期是 date2。当 date2 即将成为最高日期时:我需要某种动画,显示 date2 将 date1 推开以成为最高日期。

我一直在尝试一些东西,例如当firstVisibleItem我将 TextView 的值从 date1 的值替换为 date2 的值时删除 date2。但这种方法令人生畏,因为如果用户向后滚动,他应该会看到上一个日期;等等等等

有谁知道我如何通过将 date2 推开来让 date2 取代它?

或者更好:

有没有办法告诉 listView 将某个项目保留在可见项目的顶部?

4

1 回答 1

0

这可能有点矫枉过正和资源密集型,但是您可以将其设置为与 TextView 具有相同大小的 ListView,而不是将 TextView 作为“标题”。该 ListView 中的项目将是您日历中的所有不同日期。然后每次你想切换“标题”日期时,你都会使用 ListViews 之类的东西.smoothScrollToPosition(int pos)。我没有测试过这个或任何东西,但它似乎是一个可行的解决方案。

于 2013-09-15T15:26:37.460 回答