我使用ViewpagerIndicatator在我的应用程序中使用viewpager。我有三个片段,当我在页面之间切换时,必须在共享的Preferences中保存数据,然后使用onStop(),onPause()和onDestory()生命周期但不起作用。
我的代码:
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;
}
}
}
}
和现在如何在另一个片段之间切换时保存数据?
答案 0 :(得分: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);
<强>更新强>
首先在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);
}
}
更好的做法是使用接口在main和fragment之间进行通信,而不是直接调用函数
现在如果你想在第0页保存数据,那么if(position == 1)如果要保存第1页的数据则保存到sharedPreferences,然后if(position == 2)保存到sharedPreferences。 但是,如果您在第3页,则无法保存数据,因为没有更多的交易。
希望你明白这个想法,然后你可以根据你的代码来操纵它。