Android - ViewPager会导致addTextChangeListener出现问题

时间:2013-03-25 00:22:40

标签: android android-fragments nullpointerexception android-viewpager

我在使用填充了两个ViewPager的{​​{1}}的活动时遇到问题。在我的项目中,我有一个活动RegisterActivity.java和两个片段:FirstFragment.java和SecondFragment.java。创建活动时,将加载两个片段:

Fragments

在FirstFragment.java中找到以下代码:

public class RegisterActivity extends FragmentActivity {
    SectionsPagerAdapter mSectionsPagerAdapter;
    ViewPager mViewPager;
    EditText firstName;

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

        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        firstName = (EditText) findViewById(R.id.edit_text_register_first_name);

        firstName.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable arg0) { }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                // Do something...
            }

        });
    }

    public class SectionsPagerAdapter extends FragmentPagerAdapter {
        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    FirstFragment firstFragment = new FirstFragment();
                    return firstFragment;
                case 1:
                    SecondFragment secondFragment = new SecondFragment();
                    return secondFragment;              
            }
            return null;
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            ...
        }
    }
}

和SecondFragment.java:

public class FirstFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View firstInterface = inflater.inflate(R.layout.fragment_first, container, false);
        return firstInterface;
    }
}

我可以向您保证所有进口产品都是按要求提供的。当我运行应用程序时,我在第41行得到一个public class SecondFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View secondInterface = inflater.inflate(R.layout.fragment_second, container, false); return secondInterface; } } ,这是声明NullPointerException的地方。根据我所做的阅读,我猜测错误发生的原因是因为addTextChangedListener不是edit_dext_register_first_name中使用的布局的一部分。尽管它是其中一个片段的布局的一部分,但应用程序不知道在哪里查找setContentView(R.layout.activity_register);,因此EditText。我可能错了。

我很难看到如何解决这个问题,所以任何建议都会非常感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

将OnTextChangedListener放在声明EditText的片段中。