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

相關問題