当用户在viewpager中滑动片段时,如何在共享首选项中保存EditText值?

时间:2016-08-04 06:34:53

标签: java android android-fragments android-viewpager android-sharedpreferences

我在viewpager中有多个片段,每个片段几乎有十个editext,所以我想将所有值保存在共享首选项中。当用户滑动片段1时,fragment1的数据将保存在共享首选项中,并且对于所有片段都是相同的。

public void user(String EditText1, String EditText2){

        // Storing data in pref
        editor.putString(value1, EditText1);
        editor.putString(value2, EditText2);

        // commit changes
        editor.commit();
    }

以下是获取edittext值以保存在共享首选项中的代码 -

pager.setOffscreenPageLimit(9);

        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {


            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

                Fragment1 f1 = new Fragment1();
                EditText1= f1.txtEditText1.getText().toString();
                EditText2= f1.txtEditText2.getText().toString();

                session.user(EditText1, EditText1);

            }
        });

当我在第一个片段上填写所有编辑文本时,当我滑动时,我收到以下错误 -

java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor `android.content.SharedPreferences$Editor.putString(java.lang.String, java.lang.String)' on a null object reference`

1 个答案:

答案 0 :(得分:0)

变量editor在User类的构造函数中为null。这就是你崩溃的原因。

同样onPageScrollStateChanged - 是做这样的事情的坏地方,因为在一次片段翻转期间会多次调用它。最好使用onPageScrolled

同样没有意义创建片段以保存某些内容,您需要使用对用户可见的片段实例。 Check如何按位置分段。