我在网格视图上有 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)
你可以试试这样的东西。我希望这对你有用。
When selection happens do this save position
int index = gridview.getFirstVisiblePosition();
当你回到gridview然后你可以试试这个
gridview.smoothScrollToPosition(int index)
对我有用的解决方案是结合 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);