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

时间:2014-05-20 07:23:03

标签: android gridview android-activity fragment

我有一个baseactivitiy并且有2个片段A和B.

A包含一个GridView,如果我滚动并按下一个项目Fragment A被Fragment 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 
    }
}

有没有解决方案?

谢谢

1 个答案:

答案 0 :(得分:0)

当Fragment停止时,您可以使用getFirstVisiblePosition()并保存此值。当您的Fragment再次启动时,如果设置了此值,请调用以下其中一项以将该项目放在屏幕上:

  • setSelection()
  • smoothScrollToPosition()
  • smoothScrollToPositionFromTop()

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

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

然后在调用smoothScrollToPositionFromTop(position, offset)时使用保存的第一个位置和保存的偏移量。