如何在Android中的viewpager之间进行更改时如何在首选项中保存数据

时间:2014-02-04 06:08:49

标签: android android-viewpager sharedpreferences viewpagerindicator

我使用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;
            }
        }
    }
}

和现在如何在另一个片段之间切换时保存数据?

1 个答案:

答案 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页,则无法保存数据,因为没有更多的交易。

希望你明白这个想法,然后你可以根据你的代码来操纵它。