0

我在使用填充了两个FragmentsViewPager的活动时遇到问题。在我的项目中,我有一个活动RegisterActivity.java和两个片段:FirstFragment.java和SecondFragment.java。当创建活动,这两个片段被加载:Android - ViewPager导致addTextChangeListener出现问题

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; 
    } 
} 

我可以向你保证,所有进口产品都按要求提供。当我运行该应用程序时,我在第41行获得NullPointerException,这是声明addTextChangedListener的地方。从我读过的内容来看,我对错误发生原因的猜测是因为edit_dext_register_first_name不是setContentView(R.layout.activity_register);中使用的布局的一部分。尽管它是其中一个片段的布局的一部分,但应用程序不知道在哪里寻找我的EditText,因此NullPointerException。但我可能是错的。

我很努力地看到我如何解决这个问题,所以任何建议将不胜感激。

谢谢!

回答

0

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

+0

如果我在'return firstInterface;'之前添加'EditText firstName =(EditText)findViewById(R.id.edit_text_register_first_name)'''它不会将'findViewById()'识别为方法。 – Drider 2013-03-25 00:32:12

+0

它需要是firstInterface.findViewById(...) – 2013-03-25 01:28:04

+0

辉煌,它完美的工作!非常感谢你的帮助! – Drider 2013-03-25 11:01:23

相关问题