你好样的(机器人)的程序员,处理屏幕旋转的片段视图(州)PagerAdapter内内片段
的情况如下:
我有一个使用NavigationDrawer的活动,允许加载3个片段。在其中的一个片段中,我有一个ViewStatePagerAdapter,它将转而承载3个片段。在其中一个片段中,我使用cursorloader加载了一堆数据库。这些值可以编辑为一个新值,但在点击某个按钮之前不应将其保存到数据库。
所有这些工作正常,但问题是,当我现在旋转屏幕,所有更改的数据都消失了。我尝试在内部片段本身中使用onSaveInstance,但我认为问题在于更高,因为我已经注意到比旋转屏幕时ViewPager跳回第一个选项卡。
什么是正确的方式(/正确的位置:活动中,某些片段,...)来:
- 确保viewpager保持正确的选项卡
- 上记得在更改的数据内片段
包含viewpager目前该片段具有下列onCreateView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home, null);
tabLayout = (TabLayout) v.findViewById(R.id.fragment_tabs);
viewPager = (ViewPager) v.findViewById(R.id.fragment_viewpager);
viewPager.setOffscreenPageLimit(3);
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
tabLayout.setupWithViewPager(viewPager);
return v;
}
并为FragmentStatePagerAdapter
class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
/**
* Return fragment with respect to Position .
*/
@Override
public Fragment getItem(int position)
{
switch (position){
case 0 : return PersonFragment.newInstance();
case 1 : return FriendsFragment.newInstance();
case 2 : return EventsFragment.newInstance();
}
return null;
}
@Override
public int getCount() {
return int_items;
}
/**
* This method returns the title of the tab according to the position.
*/
@Override
public CharSequence getPageTitle(int position) {
switch (position){
case 0 :
return "ME";
case 1 :
return "FOLLOWING";
case 2 :
return "EVENTS";
}
return null;
}
}
没有什么特别的事情发生在这里休息的内部类。 (这也许应该?)
的片段viewpager内部已经按照预先的onCreate/onCreateView
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_person, container, false);
this.viewHolder = new ViewHolder(rootView);
if (savedInstanceState != null) {
CharSequence savedPersonName = savedInstanceState.getCharSequence("personName");
if (savedPersonName != null) {
Log.v("PersonFragment", savedPersonName.toString());
this.viewHolder.personnameView.setText(savedPersonName);
}
}
return rootView;
}
感谢。
后一些代码的东西。你的viewpager在创建什么?它是获取现有片段的一个实例,还是完全创建一个新的片段?什么是你的onCreate的片段。 – QuantumTiger
@QuantumTiger 即将推出,已经添加了一个部分,也添加了更多。 – CounterFlame
你在哪里重新加载savedinstancestate – QuantumTiger