【问题标题】:GridView scroll positionGridView 滚动位置
【发布时间】:2013-12-24 13:35:38
【问题描述】:

我有一个填充了 10 张图像的 gridview,当我向下滚动到最后一项并完全更改数据时,这样:

gridAdapter.values.clear();
gridAdapter.notifyDataSetChanged();

并添加全新的一组 10 张图像。

问题是,默认情况下gridView滚动到最底部的item,可能是因为之前的滚动位置是那个。就像您滚动列表一样 -> 单击项目 -> 单击返回,浏览器会尝试滚动到上一个滚动位置。

我怎样才能显示顶部的更多项目,而不是这种行为。

【问题讨论】:

  • 您的目标是像无限网格一样,最大适配器中只有 10 个项目,并且用户能够滚动它而不会注意到任何差异吗?
  • 不,当我清除数据并添加新数据时,我希望 gridview 保持在最上面的项目。
  • 设置新数据后是否尝试过scrollTo(0)?
  • 没有这个功能
  • GridView 应该有那个方法

标签: android gridview


【解决方案1】:

试试这个:

int pos = gridview.getFirstVisiblePosition(); 
gridview.smoothScrollToPosition(pos);

当您从其他活动返回时。

【讨论】:

  • 这有点像显示最后一项,然后滚动到顶部。相反,我怎样才能避免显示最后一项?
  • 您可以尝试将 GlobalLayoutListener 添加到 GridView 它的 ViewTreeObserver,在侦听器中尝试执行此操作或将位置设置为 0。例如:gridView.setPosition(0)(类似的东西)。跨度>
【解决方案2】:

在底部时可以调用:

gridView.setAdapter(null);
gridView.setAdapter(prevAdapterWithNewItems);

但是,这不会中止用户滚动或投掷效果。

【讨论】:

  • 我也在做同样的事情,它工作正常,除了 GridView 默认显示最后一个滚动位置而不是从顶部开始(如列表视图)。
  • 嗯好吧,我需要自己重现问题以找到可行的解决方案,我将在今天晚些时候访问工作,然后在这里发布。
  • 您是否希望网格在您设置新项目时停止(中止投掷/用户滚动)?
猜你喜欢
  • 2017-03-19
  • 2013-09-10
  • 2019-02-02
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多