Android 使用片段时保存GridView滚动状态

Android 使用片段时保存GridView滚动状态,android,gridview,android-activity,fragment,Android,Gridview,Android Activity,Fragment,我有一个基本活动,有两个片段a和B A包含一个GridView,如果我滚动并按下一个项目,片段A将被片段B替换。现在我按下后退键,片段A出现在屏幕上,但GridView与我切换到片段B时的位置不同 下面是如何替换片段 public void changeFragment(Fragment inputFragment,String tag) { FragmentManager fragmentManager = getSupportFragmentManager();

我有一个基本活动,有两个片段a和B

A包含一个GridView,如果我滚动并按下一个项目,片段A将被片段B替换。现在我按下后退键,片段A出现在屏幕上,但GridView与我切换到片段B时的位置不同

下面是如何替换片段

public void changeFragment(Fragment inputFragment,String tag)
{       
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction(); 

    ft.replace(R.id.content_frame,inputFragment,tag)
    .addToBackStack(tag)
    .commit();
}
我的片段的onCreate事件

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}
onCreateView事件

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    mainView = LayoutInflater.from(mContext).inflate(R.layout.home_page, null);

    if(savedInstanceState == null)
    {
            //do work 
    }
}
有什么解决办法吗


谢谢

当片段停止并保存此值时,您可以使用
getFirstVisiblePosition()
。当您的片段再次启动时,如果设置了此值,请调用以下操作之一以在屏幕上定位该项目:

  • setSelection()
  • smoothScrollToPosition()
  • smoothScrollToPositionFromTop()
如果使用
smoothScrollToPositionFromTop()
,则还需要保存第一个可见项的Y偏移量。您可以通过执行以下操作来实现这一点:

View child = gridView.getChildAt(0);
int offset = child.getTop();

然后在调用smoothScrollToPositionFromTop(位置,偏移量)时使用保存的第一个位置和保存的偏移量。谢谢您的快速回复。是否可以保存整个片段状态并防止重新创建自身?可能,但这可能保留或不保留GridView的状态。尝试一下,如果这还不够,你可以尝试使用我建议的想法。