1
视图(在这种情况下,ViewPager
s)有自己的保存和恢复状态的实现,我依靠它来保持我的ViewPager在设备旋转后的同一页上。我如何让观点将他们的状态保持在片段中?
当ViewPager处于活动状态时,它工作得很好。我会滚动到一个页面,旋转设备,它仍然在该页面上。 onSaveInstanceState
无需代码。
我已经将该活动转换为片段。现在,ViewPager不保持它的状态!如果我滚动到页面并旋转设备,则返回到第1页。
我知道我可以保存并恢复onSaveInstanceState
和onCreateView
中的页面,但我宁愿让视图自行完成特别是当我添加更多视图并且变得更加复杂时。
如何恢复此视图恢复碎片的功能?
这里是我的片段:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Dashboard extends Fragment {
private PagerAdapter pagerAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pagerAdapter = new PagerAdapter(getChildFragmentManager());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dashboard, container, false);
// irrelevant bits removed
ViewPager pager = (ViewPager) view.findViewById(R.id.dashboard_pager);
pager.setOffscreenPageLimit(3);
pager.setAdapter(pagerAdapter);
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) view.findViewById(R.id.dashboard_tabs);
tabs.setShouldExpand(true);
tabs.setViewPager(pager);
return view;
}
class PagerAdapter extends FragmentStatePagerAdapter implements PagerSlidingTabStrip.CustomTabProvider {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return Fragment.instantiate(getActivity(), Fragment1.class.getName());
case 1:
return Fragment.instantiate(getActivity(), Fragment2.class.getName());
case 2:
return Fragment.instantiate(getActivity(), Fragment3.class.getName());
}
return null;
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "*removed*";
case 1:
return "*removed*";
case 2:
return "*removed*";
}
return null;
}
@Override
public View getCustomTabView(ViewGroup viewGroup, int i) {
return getActivity().getLayoutInflater().inflate(R.layout.tab, viewGroup, false);
}
}
}
http://stackoverflow.com/a/9646622/609782已经检查了这个答案?如果你想在'onSavedInstanceState()'中发现你的片段是否仍然存在,你可以避免它。 除此之外,我假设你知道'android:configChanges =“orientation | screenSize”'? – Darpan 2015-04-06 03:54:47
太棒了,让我走上正轨!当我使用导航抽屉时,我不得不稍微调整它,但实质上通过标记来检查片段,如果找不到它,则重新创建片段似乎完美地工作。谢谢!如果你做出答案,我会接受它。 – 2015-04-06 04:30:14