0

Я использую ViewpagerIndicatator для использования viewpager в своем приложении. У меня есть три фрагмента, и когда я переключаюсь между страницами, нужно сохранять данные в общих настройках, а затем использовать onStop(), onPause() и onDestory(), но не работать.как сохранить данные в Prefrences при изменении между viewpager в Android

мой код:

public class BirthFragment extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.e("Test", "hello"); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     init_Cal(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.dialog_user_layout, container, 
      false); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     Prefrences_User = getActivity().getSharedPreferences("user", 0); 
     editor_user = Prefrences_User.edit(); 
     editor_user.putString("username", "user"); 
     editor_user.putString("birth", ""); 
     editor_user.commit(); 
    } 
} 

и viewpagerActiivty:

public class ViewPagerExample extends FragmentActivity { 

    private MyAdapter mAdapter; 
    private ViewPager mPager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.main); 
     mAdapter = new MyAdapter(getSupportFragmentManager()); 
     mPager = (ViewPager) findViewById(R.id.pager); 
     mPager.setAdapter(mAdapter); 
    } 

    public static class MyAdapter extends FragmentPagerAdapter { 

     public MyAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public int getCount() { 
      return 3; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
      case 0: 
       return new BirthFragment(); 
      case 1: 
       return new PeriodFragment(R.drawable.ic_launcher); 
      case 2: 
       return new FinalFragment(); 
      default: 
       return null; 
      } 
     } 
    } 
} 

и теперь Как сохранить данные, когда переключатель между другим фрагментом?

ответ

1

как насчет того, чтобы реализовать OnPageChangeListener и при смене страницы он будет вызывать следующую функцию

@Override 
public void onPageScrollStateChanged(int arg0) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void onPageScrolled(int arg0, float arg1, int arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onPageSelected(int arg0) { 
    // TODO Auto-generated method stub 

} 

затем добавить свой sharedpreferences код для подходящей функции так, когда прокрутка закончена она сохранит в sharedpreferences.

Не забудьте зарегистрировать пейджер слушателя ..

yourPager.setOnPageChangeListener(this); 

Update

первой реализацию onPageChangeListener в вашем ViewPagerExample классе.

затем под mPager.setAdapter(mAdapter); добавить следующее:

mPager.setOnPageChangeListener(this); 

создать функцию в вашем фрагменте, что и добавить код sharedpreferences к этой функции.

назад к вашему ViewPageExample и в onPageScrolled(int position, float arg1, int x)

@Override 
public void onPageScrolled(int position, float arg1, int x) { 
    // TODO Auto-generated method stub 
    Fragment f = (Fragment) mPager.getAdapter().instantiateItem(mPager, position); 
    if(position == 0 && x > 0) { 


     //birth.newInstance(ViewPagerExample.this); 
     ((BirthFragment)f).SaveData(MainActivity.this); 
    } 

} 

лучшей практикой является использование интерфейсов для обмена данных между основным и фрагментом, а не вызывать функцию непосредственно

теперь, если вы хотите, чтобы сохранить данные в стр. 0, то if (position == 1) сохранить в sharedPreferences, если вы хотите сохранить данные на странице 1, затем if (position == 2) сохранить в sharedPreferences. однако, если вы на странице 3, вы не можете сохранять данные, потому что транзакций больше нет.

надеюсь, что у вас есть идея, тогда вы можете манипулировать ею в соответствии с вашим кодом.

+0

спасибо, у меня есть три фрагмента BirthFrgment, PeriodFragment и FinalFragment. Как распознать свиток? –

+0

Я изменил код выше и добавлю ViewPagerExample –

+0

, пожалуйста, проверьте обновленную часть. – Coderji