如何将GridView滚动到指定位置?

7

我在网格视图上有30张图片(每行3张)。如果用户选择第20张图片并转到下一个屏幕,然后返回,我想将焦点放在那个位置。我使用了以下代码行,它可以在前8行工作,但在最后2行中无法滚动。请帮忙。

gridview.setSelection(position);
gridview.requestFocusFromTouch();
gridview.setSelection(position);

谢谢

3个回答

14

原因是因为您的视图将在适配器中被重复使用。

public class ImageAdapter extends BaseAdapter {
    private Context context;
    private final String[] someprivatevariable;

    public ImageAdapter(Context context, String[] mobileValues) {
        // Your boring constructor
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View gridView;

            // REUSE VIEW IF NOT NULL CODE
        if (convertView == null) {
                  .....
                  .....
                  you generally create your view here
        } else {
            gridView = (View) convertView;
        }

        return gridView;
    }
}

如果您的视图被强制不可复用,那么您可以通过保存此值来滚动到位置

int index = gridview.getFirstVisiblePosition(); 

通过以下方法恢复该值

gridview.smoothScrollToPosition(int index)

@lalitab B但是smoothScrollToPosition(index)在ICS上不起作用。有没有办法在ICS上使用它?请告诉我,谢谢。 - Hradesh Kumar
1
你知道如何制作非平滑滚动吗?我在我的网格视图中有1000多个元素,而平滑滚动需要一些时间。 - Agata

7
你可以尝试以下方法。我希望这对你有用。
当选择发生时,请保存位置。
int index = gridview.getFirstVisiblePosition();

当你回到GridView时,可以尝试这样做:

gridview.smoothScrollToPosition(int index)

1
我所使用的解决方案是将Monali和Sreedev的代码结合起来(感谢Monali和Sreedev)。
private int gridviewVerticalPositionWhenThumbnailTapped;

...

// save vertical position of gridview screen, will use to re-find this location if user follows a usre and gridview gets redrawn
gridviewVerticalPositionWhenThumbnailTapped = gridview.getFirstVisiblePosition();

稍后在应用程序中...
// scroll gridview to vertical position pre user tap follow                
gridview.setSelection(gridviewVerticalPositionWhenThumbnailTapped);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接