0

ViewPager2つが設定されているを使用するアクティビティで問題が発生していFragmentsます。私のプロジェクトには、1つのアクティビティRegisterActivity.javaと2つのフラグメント(FirstFragment.javaとSecondFragment.java)があります。アクティビティが作成されると、2つのフラグメントがロードされます。

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) {
            ...
        }
    }
}

次のコードはFirstFragment.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;
    }
}

およびSecondFragment.java:

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ている41行目に表示されます。addTextChangedListener私が行ったことから、エラーが発生する理由についての私の推測は、がedit_dext_register_first_nameで使用されているレイアウトの一部ではないためですsetContentView(R.layout.activity_register);。フラグメントの1つのレイアウトの一部であるという事実にもかかわらず、アプリはどこを探すべきかわからないEditTextため、NullPointerException。私は間違っているかもしれません。

この問題を解決する方法を見つけるのに苦労しているので、アドバイスをいただければ幸いです。

ありがとう!

4

1 に答える 1

0

EditTextを宣言するフラグメントにOnTextChangedListenerを配置します。

于 2013-03-25T00:25:33.347 に答える