Java Android GridView上的滚动位置跳转
我有一个GridView,它包含几个项目。通过单击项目,将创建一个新的详图视图。然后单击“上一步”按钮,用户将返回到GridView。我想保留精确的滚动位置,我已经通过以下代码实现了这一点: 创建GridViewJava Android GridView上的滚动位置跳转,java,android,Java,Android,我有一个GridView,它包含几个项目。通过单击项目,将创建一个新的详图视图。然后单击“上一步”按钮,用户将返回到GridView。我想保留精确的滚动位置,我已经通过以下代码实现了这一点: 创建GridView mArtistList = (GridView) artistsView.findViewById(R.id.gridview); mArtistAdapter = new ArtistAdapter(mContext); mArtistList.setAdapter(mArtistA
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上的项目时
这个很好用。按下“后退”按钮后,滚动位置正好正确。当用户触摸GridView时,问题就出现了。滚动跳转到第一个可见项正好位于屏幕顶部的位置。我怎样才能防止这种跳跃
我的母语不是英语,所以我的解释可能很难理解。这就是为什么我要画一幅图像来说明问题:
存储滚动位置并在OnResume中重置。问题不是恢复滚动位置。这已经行得通了。当用户触摸屏幕时,位置跳转到错误的位置,如所附图像所示。sActiveTop=0?getChildAt0.getTop==0。尝试sActiveTop=sActiveItem.getTop;谢谢,但是不行。sActiveTop计算正确,初始滚动偏移正确。当用户触摸GridView时,就会出现问题。我认为它与GridView处理滚动的方式有关。它不使用scrollBy或类似的设置值。。。
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();
}