【问题标题】:workarounds for GridView.scrollTo()?GridView.scrollTo() 的解决方法?
【发布时间】:2012-10-12 04:46:47
【问题描述】:

here 所述,Android 的 GridView.scrollTo() 不起作用。解决方案中提到的方法setSelectedPosition,在GridView中似乎不存在

smoothScrollToPosition 确实有效,但我真的不想要动画。

对于上下文,我有一个 CursorAdapter-backed GridView,我希望视图“重置”,即当我更改光标时滚动到顶部。

【问题讨论】:

    标签: android gridview scroll


    【解决方案1】:

    我一直在为此使用setSelection(int position),它似乎工作得很好。要滚动到顶部,只需使用 0 作为位置。

    来自文档:

    如果处于触摸模式,该项目将不会被选中,但仍会被正确定位。

    编辑: 添加了将setSelection 发布为 Runnable 的代码:

    albumsView.post(new Runnable() {
        @Override
        public void run() {
            albumsView.setSelection(0);
        }
    });
    

    【讨论】:

    • 我试过了,没有运气。你在使用 CursorAdapter 吗?还是谢谢。
    • 不,只是一个 BaseAdapter 扩展。您是在更改光标之前还是之后尝试?我不确定这会有所不同,但是我不明白为什么在简单滚动时使用 CursorAdapter 而不是其他任何东西会有所作为。
    • 好电话,非常感谢!我在这个问题上胡思乱想了很长时间。 (字面意思是小时和小时)。显然,调用 setSelection() 和 changeCursor() 时都出现了问题。 setSelection() 和 changeCursor 的顺序无关紧要(如果只是按顺序直接调用,两者都会失败),但它确实可以回发 setSelection() [pastebin.com/XmM5jqD3]。请用该粘贴更新您的答案:)
    • 另外,我想我需要等待 22 小时才能获得赏金……过了这段时间后会这样做。
    • 如果您在使用 setSelection 时遇到问题,那么问题几乎肯定在于 gridview 布局正在刷新过程中。因此,对 setSelection 的调用将被忽略。为了缓解这个问题,使用 post(监听 GridView 布局的完成),如下所示: yourGridView.post(new Runnable() { @Override public void run() { yourGridView.setSelection(0); } });
    【解决方案2】:

    我发现为了可靠地使用gridView.setSelection(index),我必须先调用gridView.setAdapter()(即使适配器已经设置并且没有改变)。像这样:

    gridView.setAdapter(gridAdapter);
    gridView.setSelection(index);
    

    【讨论】:

    • 调用 setAdapter 将始终导致滚动到顶部的外观,因为现有适配器被拉走并替换为新适配器。这对性能不利,应该尝试操纵现有的适配器。
    • 错误的@slott。如果适配器已设置,则不会导致重置。我没有说任何关于创建新适配器或删除旧适配器的内容。我所说的是,根据我的经验,我必须重新调用 setAdapter 即使适配器已经设置,以便 setSelection 能够可靠地工作。
    • 我在这里尝试了其他方法,这是唯一有效的方法。我在适配器上设置了一个过滤器,并希望 gridview 返回顶部。尽管数据正确重置,但图像有时会在图像视图中显示错误的照片。谢谢@mikejonesguy
    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多