Android 使用片段时保存GridView滚动状态
我有一个基本活动,有两个片段a和B A包含一个GridView,如果我滚动并按下一个项目,片段A将被片段B替换。现在我按下后退键,片段A出现在屏幕上,但GridView与我切换到片段B时的位置不同 下面是如何替换片段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();
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的状态。尝试一下,如果这还不够,你可以尝试使用我建议的想法。