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

How to save EditText value in Shared Preferences when user swipe fragment in viewpager?

我在 viewpager 中有多个片段,每个片段都有近十个编辑文本,所以我想将所有值保存在共享首选项中。当用户滑动片段 1 时,片段 1 的数据将保存在共享首选项中,所有片段都相同。

public void user(String EditText1, String EditText2){

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

        // commit changes
        editor.commit();
    }

下面是我获取编辑文本值以保存在共享首选项中的代码 -

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`

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

另外 onPageScrollStateChanged - 不适合做那样的事情,因为它会在一个片段滑动期间被调用多次。最好使用 onPageScrolled

同样,为了保存某些东西而创建片段是没有意义的,您需要使用对用户可见的片段实例。 Check如何按位置获取片段。