我有一个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
}
}
有没有解决方案?
谢谢
答案 0 :(得分:0)
当Fragment停止时,您可以使用getFirstVisiblePosition()
并保存此值。当您的Fragment再次启动时,如果设置了此值,请调用以下其中一项以将该项目放在屏幕上:
setSelection()
smoothScrollToPosition()
smoothScrollToPositionFromTop()
如果您使用smoothScrollToPositionFromTop()
,那么您还需要保存第一个可见项目的Y偏移量。您可以通过执行以下操作来实现:
View child = gridView.getChildAt(0);
int offset = child.getTop();
然后在调用smoothScrollToPositionFromTop(position, offset)
时使用保存的第一个位置和保存的偏移量。