【问题标题】:Android GridView scrolls to top on item clickAndroid GridView 在项目单击时滚动到顶部
【发布时间】:2012-02-15 22:29:47
【问题描述】:

我在 Android 上有一个 GridView,我用自定义图像填充。当用户单击图像时,它会转到不同的活动。这非常有效。

我想解决的唯一问题是,每当用户进行选择时,GridView 都会滚动回顶部。我想保持在同一个位置,所以当用户使用 GridView 回到活动时,它会显示最后一个滚动位置。

有可能吗?

我尝试在滚动事件上放置一个侦听器,但显然,最后捕获的事件是滚动到顶部,所以我不能使用它来将滚动移回它应该在的位置。

提前致谢!

更新:忘了提一个很重要的点。我坚持使用 API 7。所以我没有 smoothScrollToPosition

【问题讨论】:

    标签: android gridview android-gridview


    【解决方案1】:

    尝试以下方法:

    private int _savedGridPosition = 0;
    private GridView _gridView;
    
    ...
    
    @Override
    protected void onSaveInstanceState (Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("grid_position", _gridView.getFirstVisiblePosition());
    }
    
    @Override
    protected void onRestoreInstanceState (Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        if(savedInstanceState != null && savedInstanceState.containsKey("grid_position")) {
            _savedGridPosition = savedInstanceState.getInt("grid_position");
        }
    }
    
    @Override
    protected void onResume() {
        _gridView.smoothScrollToPosition(_savedGridPosition);
    }
    
    @Override void onPause() {
        // set in onPause() too since onRestoreInstanceState() is only
        // called when the Activity is destroyed and recreated.
        _savedGridPosition = _gridView.getFirstVisiblePosition();
    }
    

    【讨论】:

    • 非常感谢您的回答。我忘了在问题上提及它,但我不能使用smoothScrollToPosition,因为我在我的应用程序中使用 API 7... :(
    • 那么你就被setSelection()困住了。
    • 将尝试使用setSelection。谢谢!
    • 在我意识到我必须将调用与 GridView 的 post 不同之后,它与 setSelection 一起工作,因为如果在 GridView 填充其所有元素之前调用 setSelection 将不起作用。谢谢您的帮助。将接受您投票赞成的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多