2017-05-05 50 views
-2

我在Android應用程序開發中遇到問題,我有一個類TextWatcher。 ,但textWatcher不能使用getSelectionStart(),getSelectionEnd(),length(),findViewById(mInputLayout),setText(s)setSelection(tempSelection)的方法。 和mainActivity不能將值轉換爲customTextWatcher。 請你幫我。Android新類TextWatcher無法從mainActivity轉換值

public class customTextWatcher implements TextWatcher { 
    CharSequence temp; 
    int editStart; 
    int editEnd; 

    String mEditText; //EditText 
    String mInputLayout; //Input Layout 
    int tempLength; // Set the EditText length to limit it 
    //private String activity; // Set the Activity of the class to use this class 
    String errorText; // When out of boundary with EditText , it will show the errorText 

    // Constructor for this Class, 
    // Get the params from main Class 
    public customTextWatcher(String mEditText, String mInputLayout, int tempLength, String errorText) { 
     this.mEditText = mEditText; 
     this.mInputLayout = mInputLayout; 
     this.tempLength = tempLength; 
     //this.activity = activity; 
     this.errorText = errorText; 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     temp = s; 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     // String selectedText = mEditText.getText().substring(editStart, editEnd); 
     editStart = mEditText.getSelectionStart(); 
     editEnd = mEditText.getSelectionEnd(); 

     if (tempLength.length() > 10) { 
      TextInputLayout til = (TextInputLayout)findViewById(mInputLayout); 
      til.setErrorEnabled(true); 
      til.setError(errorText); 

      s.delete(editStart - 1, editEnd); 
      int tempSelection = editStart; 
      mEditText.setText(s); 
      mEditText.setSelection(tempSelection); 
     } 
    } 
} 






mEditTextLastName = (EditText) findViewById(R.id.input_lastName); 
     mEditTextFirstName = (EditText) findViewById(R.id.input_firstName); 
     mEditTextHomeAddress = (EditText) findViewById(R.id.input_homeAddress); 
     mEditTextCountry = (EditText) findViewById(R.id.input_country); 
     mEditTextPhoneCode = (EditText) findViewById(R.id.input_PhoneCode); 
     mEditTextMobile = (EditText) findViewById(R.id.input_mobile); 
     mEditTextOtherPhone = (EditText) findViewById(R.id.input_otherPhone); 
     mEditTextEmail = (EditText) findViewById(R.id.input_email); 
     mEditTextPassword = (EditText) findViewById(R.id.input_password); 
     mEditTextReComfirmPassword = (EditText) findViewById(R.id.input_reConfirmPassword); 
     mEditTextWechat = (EditText) findViewById(R.id.input_wechat); 
/** 
* mTextInputLayout findById of layout TextInputLayout 
*/ 
     mTextInputLayout_LastName = (TextInputLayout) findViewById(R.id.lastNameLayout); 
     mTextInputLayout_FistName = (TextInputLayout) findViewById(R.id.firstNameLayout); 
     mTextInputLayout_HomeAddress = (TextInputLayout) findViewById(R.id.homeAddressLayout); 
     mTextInputLayout_Country = (TextInputLayout) findViewById(R.id.countryLayout); 
     mTextInputLayout_PhoneCode = (TextInputLayout) findViewById(R.id.phoneCodeLayout); 
     mTextInputLayout_Mobile = (TextInputLayout) findViewById(R.id.mobileLayout); 
     mTextInputLayout_OtherPhone = (TextInputLayout) findViewById(R.id.otherPhoneLayout); 
     mTextInputLayout_Email = (TextInputLayout) findViewById(R.id.emailAddressLayout); 
     mTextInputLayout_Password = (TextInputLayout) findViewById(R.id.passwordLayout); 
     mTextInputLayout_ReComfirmPassword = (TextInputLayout) findViewById(R.id.reConfirmPasswordLayout); 
     mTextInputLayout_Wechat = (TextInputLayout) findViewById(R.id.wechatLayout); 


     mEditTextLastName.addTextChangedListener(new customTextWatcher(mEditTextLastNam,mTextInputLayout_LastName,20,"error : Can't over 20's character!")); 
+0

對不起,您對「tran」有什麼意思? – JCoder

+0

將editText傳遞給TextWatcher的類 – user1902899

回答

0

那是因爲你動了你的TextWatcher成單獨的類。 如果您的TextWatcher是活動內的內部類,則可以訪問該活動(上下文)。一種解決方案是在TextWatcher中定義回調接口並在Activity中實現它。通過這樣做,您將能夠將您的Activity設置爲TextWatcher的回調並訪問Activity的方法。

相關問題