我在网格视图上有30张图片(每行3张)。如果用户选择第20张图片并转到下一个屏幕,然后返回,我想将焦点放在那个位置。我使用了以下代码行,它可以在前8行工作,但在最后2行中无法滚动。请帮忙。
gridview.setSelection(position);
gridview.requestFocusFromTouch();
gridview.setSelection(position);
谢谢
我在网格视图上有30张图片(每行3张)。如果用户选择第20张图片并转到下一个屏幕,然后返回,我想将焦点放在那个位置。我使用了以下代码行,它可以在前8行工作,但在最后2行中无法滚动。请帮忙。
gridview.setSelection(position);
gridview.requestFocusFromTouch();
gridview.setSelection(position);
谢谢
原因是因为您的视图将在适配器中被重复使用。
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)
int index = gridview.getFirstVisiblePosition();
当你回到GridView时,可以尝试这样做:
gridview.smoothScrollToPosition(int index)
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);