Android 无法使用ViewPager和FragmentPagerAdapter访问片段视图

Android 无法使用ViewPager和FragmentPagerAdapter访问片段视图,android,android-fragments,Android,Android Fragments,试着通过闲逛了解Android开发,所以如果查询太简单,请原谅 我有以下代码,由于NullPointerException而不断崩溃-我尝试了几种方法来访问片段的视图,但我总是得到null。谁能帮我解决我做错了什么 我试图做的是在滚动页面时将EditText的内容保存到SharedReferences。就我个人而言,我似乎无法访问在显示选项卡时加载的片段的视图 public class ViewPagerAdapter extends FragmentPagerAdapter { fi

试着通过闲逛了解Android开发,所以如果查询太简单,请原谅

我有以下代码,由于NullPointerException而不断崩溃-我尝试了几种方法来访问片段的视图,但我总是得到null。谁能帮我解决我做错了什么

我试图做的是在滚动页面时将EditText的内容保存到SharedReferences。就我个人而言,我似乎无法访问在显示选项卡时加载的片段的视图

public class ViewPagerAdapter extends FragmentPagerAdapter {

    final int PAGE_COUNT = 3;
    // Tab Titles
    private String tabtitles[] = new String[] { "Profile", "Address", 
    "Security"};
    Context context;

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

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

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            // Open FragmentTab1.java
            case 0:
                CreateUserFragmentProfile fragmenttab1 = new 
                CreateUserFragmentProfile();
                return fragmenttab1;
            // Open FragmentTab2.java
            case 1:
                CreateUserFragmentLocation fragmenttab2 = new 
                CreateUserFragmentLocation();
                return fragmenttab2;
            // Open FragmentTab3.java
            case 2:
                CreateUserFragmentSecurity fragmenttab3 = new 
                CreateUserFragmentSecurity();
                return fragmenttab3;

        }
        return null;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabtitles[position];
    }

}
片段代码扩展了片段,几乎什么也不做

public class CreateUserFragmentSecurity extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
    container, @Nullable Bundle savedInstanceState) {
        //return super.onCreateView(inflater, container, 
    savedInstanceState);
        View view = inflater.inflate(R.layout.create_fragment_security, 
    container, false);


        return view;

    }

    public void  storeData(){

    }
}
活动代码如下:

public class CreateUser extends AppCompatActivity {


    public SharedPreferences preferences;
    public SharedPreferences.Editor editor;
    public View currView;
    public String fname, lname, dob, gender, email, addr1, addr2, addr3, 
    addrstate, city, passwd, passwdPlain;
    public Long mobile, pin;
    //public FragmentPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_user);

        preferences = getSharedPreferences("Reviv", MODE_PRIVATE);
        editor = preferences.edit();

        // Locate the viewpager in activity_create_user.xml
        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);

        // Set the ViewPagerAdapter into ViewPager

        final FragmentPagerAdapter adapter = new 
        ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
        viewPager.setOffscreenPageLimit(3);

        viewPager.addOnPageChangeListener(new 
            ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, 
            int positionOffsetPixels) {
                boolean hasChanged = false;
                switch (position){ // store data on tab switch
                    case 0: // Profile tab
                        //currView = 
               viewPager.getChildAt(viewPager.getCurrentItem());  // returns 
               null
                        currView = 
               adapter.getItem(viewPager.getCurrentItem()).getView();  // 
               crashes, returns null
                        EditText etFname = 
               currView.findViewById(R.id.etFname);


                        fname = etFname.getText().toString();

                        hasChanged = false;

                        if(!StringUtils.isEmpty(fname)) {
                            editor.putString("fname", fname);
                            hasChanged = true;
                        }

                        if(hasChanged == true) editor.commit();

                        break;
                    case 1: // Address tab
                        // currView = 
             viewPager.getChildAt(viewPager.getCurrentItem()); // returns 
             null
                        currView = 
             adapter.getItem(viewPager.getCurrentItem()).getView();
                        EditText etAddr1 = 
             currView.findViewById(R.id.etAddr1);



                        addr1 = etAddr1.getText().toString();


                        hasChanged = false;

                        if(!StringUtils.isEmpty(addr1)) {
                            editor.putString("addr1", addr1);
                            hasChanged = true;
                        }


                        if(hasChanged == true) editor.commit();


                        break;
                    case 2: // Security tab
                        //currView = 
          viewPager.getChildAt(viewPager.getCurrentItem()); // returns null
                        currView = 
          adapter.getItem(viewPager.getCurrentItem()).getView();

                        EditText etPasswd = 
          currView.findViewById(R.id.etPasswd);


                        passwd = etPasswd.getText().toString();

                        hasChanged = false;

                        if(!StringUtils.isEmpty(passwd)) {
                            editor.putString("passwd", passwd);
                            hasChanged = true;
                        }



                        if(hasChanged == true) editor.commit();

                        break;
                }

            }

            @Override
            public void onPageSelected(int position) {
               // do nothing
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                // do nothing
            }
        });
    }
}
我的堆栈跟踪如下所示:

public class CreateUser extends AppCompatActivity {


    public SharedPreferences preferences;
    public SharedPreferences.Editor editor;
    public View currView;
    public String fname, lname, dob, gender, email, addr1, addr2, addr3, 
    addrstate, city, passwd, passwdPlain;
    public Long mobile, pin;
    //public FragmentPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_user);

        preferences = getSharedPreferences("Reviv", MODE_PRIVATE);
        editor = preferences.edit();

        // Locate the viewpager in activity_create_user.xml
        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);

        // Set the ViewPagerAdapter into ViewPager

        final FragmentPagerAdapter adapter = new 
        ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
        viewPager.setOffscreenPageLimit(3);

        viewPager.addOnPageChangeListener(new 
            ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, 
            int positionOffsetPixels) {
                boolean hasChanged = false;
                switch (position){ // store data on tab switch
                    case 0: // Profile tab
                        //currView = 
               viewPager.getChildAt(viewPager.getCurrentItem());  // returns 
               null
                        currView = 
               adapter.getItem(viewPager.getCurrentItem()).getView();  // 
               crashes, returns null
                        EditText etFname = 
               currView.findViewById(R.id.etFname);


                        fname = etFname.getText().toString();

                        hasChanged = false;

                        if(!StringUtils.isEmpty(fname)) {
                            editor.putString("fname", fname);
                            hasChanged = true;
                        }

                        if(hasChanged == true) editor.commit();

                        break;
                    case 1: // Address tab
                        // currView = 
             viewPager.getChildAt(viewPager.getCurrentItem()); // returns 
             null
                        currView = 
             adapter.getItem(viewPager.getCurrentItem()).getView();
                        EditText etAddr1 = 
             currView.findViewById(R.id.etAddr1);



                        addr1 = etAddr1.getText().toString();


                        hasChanged = false;

                        if(!StringUtils.isEmpty(addr1)) {
                            editor.putString("addr1", addr1);
                            hasChanged = true;
                        }


                        if(hasChanged == true) editor.commit();


                        break;
                    case 2: // Security tab
                        //currView = 
          viewPager.getChildAt(viewPager.getCurrentItem()); // returns null
                        currView = 
          adapter.getItem(viewPager.getCurrentItem()).getView();

                        EditText etPasswd = 
          currView.findViewById(R.id.etPasswd);


                        passwd = etPasswd.getText().toString();

                        hasChanged = false;

                        if(!StringUtils.isEmpty(passwd)) {
                            editor.putString("passwd", passwd);
                            hasChanged = true;
                        }



                        if(hasChanged == true) editor.commit();

                        break;
                }

            }

            @Override
            public void onPageSelected(int position) {
               // do nothing
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                // do nothing
            }
        });
    }
}
java.lang.NullPointerException:尝试调用虚拟方法 空值上的“android.view.view android.view.view.findViewById(int)” 对象引用 在 com.portmanteau.revio.CreateUser$1.onPageScrolled(CreateUser.java:58) 在 android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1921) 在 android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1895) 在android.support.v4.view.ViewPager.pageScrolled上(ViewPager.java:1833) 位于android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:690) 位于android.support.v4.view.ViewPager.onLayout(ViewPager.java:1777) 在android.view.view.layout(view.java:19678) 位于android.view.ViewGroup.layout(ViewGroup.java:6057) 在 android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197) 在android.view.view.layout(view.java:19678) 位于android.view.ViewGroup.layout(ViewGroup.java:6057) 位于android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 位于android.widget.FrameLayout.onLayout(FrameLayout.java:261) 在android.view.view.layout(view.java:19678) 位于android.view.ViewGroup.layout(ViewGroup.java:6057) 在 android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:434) 在android.view.view.layout(view.java:19678) 位于android.view.ViewGroup.layout(ViewGroup.java:6057) 位于android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 位于android.widget.FrameLayout.onLayout(FrameLayout.java:261) 在android.view.view.layout(view.java:19678) 位于android.view.ViewGroup.layout(ViewGroup.java:6057) 位于android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791) 位于android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635) 位于android.widget.LinearLayout.onLayout(LinearLayout.java:1544) 在android.view.view.layout(view.java:19678) 位于android.view.ViewGroup.layout(ViewGroup.java:6057) 位于android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 位于android.widget.FrameLayout.onLayout(FrameLayout.java:261) 位于com.android.internal.policy.DecorView.onLayout(DecorView.java:758) 在android.view.view.layout(view.java:19678) 位于android.view.ViewGroup.layout(ViewGroup.java:6057) 在android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2510) 在android.view.ViewRootImpl.performTraversals上(ViewRootImpl.java:2219) 位于android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1405) 在 android.vie
adapter.getItem(viewPager.getCurrentItem()).getView();
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    boolean hasChanged = false;
    if (positionOffset > 0) {
        currView = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + position).getView();
        if (currView != null) {
            EditText editText = null;
            if (position == 0) editText = currView.findViewById(R.id.etPasswdPlain);
            else if (position == 1) editText = currView.findViewById(R.id.etAddr1);
            else if (position ==2) editText = currView.findViewById(R.id.etFname);
            if (editText != null) {
                String value = editText.getText().toString();
                Log.d("TAG", "Value is " + value);
            }
        }
    }
}