我正在编写一个垂直可滚动日历应用程序(listview),它一直显示1个月。每当用户向上或向下滚动一定量的倾角时,我希望日历跳转到下个月或上个月(取决于滚动的方向)。
我使用setSelection方法进行跳转。我的问题是,由于某种原因,setSelection调用getView两次。首先,它要求位置0,然后是位置1 - 始终。 所以基本上每当我想滚动到相邻的月份时,getView被调用3次。 首先调用它是因为列表需要显示下一个/上个月的顶部/底部 之后 - 就像我说的那样 - 因为setSelection(总是位置0和位置1)而被调用两次。
我有两个问题。首先,我有一个textview,每次滚动到新的月份时都会保持刷新。我根据我在getView中进行的计算提供了此textview的数据,因为getView被另外两次调用false数据(对于位置0和1 ...换句话说,日历能够显示的第一个和第二个月)我的日期文本视图有时会显示错误的日期。(更确切地说,只要我快速滚动而不是实际的月份,它就会显示列表的第一个月)
当然我可以用某种方式解决这个问题,例如我在getView方法或类似的东西中放了一个计数器整数,但我的另一个问题是日历有点滞后。每当我开始滚动动作时,它不需要平滑滚动,而是需要大约一秒来加载下个月。 如果以某种方式我可以避免setSelection解决我的两个问题。 我尝试过使用scrollBy,但下个月它不会生成。
有什么想法吗? 提前致谢
答案 0 :(得分:0)
您应该减少getView
方法中的处理量,而不是尝试减少getView
次调用的数量。此方法应侧重于分配值,而不是执行计算。你不应该试图抢先打电话。
在这种情况下,您可以轻松保存适配器可以读取的后计算数据对象列表。
如果您还没有这样做,您还应该利用展示here的视图持有者模式。