你好樣的(機器人)的程序員,處理屏幕旋轉的片段視圖(州)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