我有GridView
,其中包含多个项目。通过单击项目,将创建新的详细信息视图。然后通过单击后退按钮,用户将返回GridView
。我想保留确切的滚动位置,我用以下代码完成了这个:
创建GridView
mArtistList = (GridView) artistsView.findViewById(R.id.gridview);
mArtistAdapter = new ArtistAdapter(mContext);
mArtistList.setAdapter(mArtistAdapter);
// Adapter gets items asynchronously
mArtistAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged () {
// setting first selection item
mArtistList.setSelection(sActiveItem);
/*
*
* PROBLEM HERE
* Works ok, but when user touches the GridView
* scroll position jumps to position where it
* would be without this line.
*
*/
mArtistList.scrollBy(0, sActiveTop);
super.onChanged();
}
});
当用户点击GridView
sActiveItem = mArtistList.getFirstVisiblePosition();
// vertical spacing (5dp to pixels)
sActiveTop = (int) (5.0f * getResources().getDisplayMetrics().density);
View firstItem = mArtistList.getChildAt(0);
if (firstItem != null) {
sActiveTop -= firstItem.getTop();
}
这很好用。按下后退按钮后,滚动位置正好正确。当用户触摸GridView
时会出现问题。滚动跳转到第一个可见项目正好位于屏幕顶部的位置。我怎样才能防止这种跳跃?
我不会说英语作为我的母语,所以我的解释可能很难理解。这就是我绘制图像以表明问题的原因: