2015-09-04 3 views
2

Я новичок в android и создаю приложение, в котором есть дизайн макета для портретного и ландшафтного режима. Приложение работает нормально и в ориентации экрана. в этом приложении Я установил валидацию в тексте редактирования и покажу ошибку set Error(). эта работа отлично, но когда я пытаюсь повернуть ориентацию с пустым полем в текстовом редакторе set Ошибка() метод set error . Я попытался решить это по-разному с помощью поиска Google, но не смог. Пожалуйста, помогите мне. БлагодаряAndroid Ориентация экрана Редактировать текст показать ошибку набора?

Ниже приводится мой код

EditText name, email, phone_no, subject, message; 
    Button send; 
    JSONObject json; 
    final Context context = this; 
    String valid_name = " ", valid_phone_no = " ", valid_email = " ", 
      valid_sub = " ", valid_msg = " "; 
    private ProgressDialog pDialog; 
    Boolean isInternetPresent = false; 
    Boolean isrotaion = false; 
    static boolean et_focus; 
    String emailPattern = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 
    JsonParser jsonParser = new JsonParser(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contact_us); 
     name = (EditText) findViewById(R.id.edtname); 
     email = (EditText) findViewById(R.id.edtemail); 
     phone_no = (EditText) findViewById(R.id.edtphone); 
     subject = (EditText) findViewById(R.id.edtsubject); 
     message = (EditText) findViewById(R.id.edtmessage); 
     send = (Button) findViewById(R.id.send); 

     ActionBar actionBar = getActionBar(); 

     actionBar.setDisplayShowHomeEnabled(false); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 
     actionBar.setDisplayShowTitleEnabled(true); 
     actionBar.setBackgroundDrawable(new ColorDrawable(Color 
       .parseColor("#0f567c"))); 
     setTitle("Contact us"); 


     send.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       if (valid_name != null && valid_email != null 
         && valid_phone_no != null && valid_sub != null 
         && valid_msg != null) { 
        isInternetPresent = isConnected(); 
        if (!isInternetPresent) { 

         buildAlertMessageNonet(); 
        } else 

        { 
         new CreateContact().execute(); 

        } 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "Please Fill up all Fields Correctly.", 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 

     }); 


     int orientation = this.getResources().getConfiguration().orientation; 
     if (orientation == Configuration.ORIENTATION_PORTRAIT) { 
      // code for portrait mode 
      isrotaion = true; 
     } else { 
      // code for landscape mode 
      isrotaion = true; 
     } 

     name.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

       validtion_name(name); 

      } 
     }); 
     email.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 
       Log.i("TAG", "betextchange"); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

       validation_Email(email); 

      } 
     }); 
     phone_no.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

       validation_Phone_no(10, 13, phone_no); 

      } 
     }); 
     subject.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

       validation_Subject(subject); 

      } 
     }); 

     message.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

       validation_Message(message); 

      } 
     }); 
    } 

    public void validtion_name(EditText edt) throws NumberFormatException { 
     Log.i("TAG", "name"); 

     Log.i("TAG", String.valueOf(edt.length())); 
     if (edt.getText().toString().trim().length() <= 0) { 
      edt.setError("Accept Alphabets Only."); 
      valid_name = null; 
     } else if (edt.getText().toString().contains(" ")) { 
      edt.setError(null); 
     } else if (!edt.getText().toString().matches("[a-zA-Z]+")) { 
      edt.setError("Accept Alphabets Only."); 
      valid_name = null; 
     } else if (edt.getText().toString().charAt(0) == ' ') { 
      edt.setError("First Letter Not be Space "); 
      valid_name = null; 

     } else { 
      valid_name = edt.getText().toString(); 
     } 

    } 

    public void validation_Phone_no(int MinLen, int MaxLen, EditText edt) 
      throws NumberFormatException { 

     if (edt.getText().toString().length() <= 0) { 
      edt.setError("Numbers Only"); 
      valid_phone_no = null; 
     } else if (edt.getText().toString().length() < MinLen) { 
      edt.setError("Minimum length " + MinLen); 
      valid_phone_no = null; 

     } else if (edt.getText().toString().length() > MaxLen) { 
      edt.setError("Maximum length " + MaxLen); 
      valid_phone_no = null; 

     } else if (edt.getText().toString().charAt(0) == ' ') { 
      edt.setError("First Number Not be Space"); 
      valid_phone_no = null; 
     } else if (!edt.getText().toString().matches("^[+]?[0-9]{10,13}$")) { 
      edt.setError("Invalid Number"); 
      valid_phone_no = null; 

     } 

     else { 
      valid_phone_no = edt.getText().toString(); 

     } 

    } 

    public void validation_Email(EditText edt) { 

     if (edt.getText().toString() == null) { 
      edt.setError("Invalid Email Address"); 
      valid_email = null; 
     } else if (isEmailValid(edt.getText().toString()) == false) { 
      edt.setError("Invalid Email Address"); 
      valid_email = null; 
     } else if (edt.getText().toString().charAt(0) == ' ') { 
      edt.setError("First Letter Not be Space"); 
      valid_email = null; 
     } else if (!edt.getText().toString().matches(emailPattern)) { 
      edt.setError("Invalid Email Address"); 
      valid_email = null; 
     } else { 
      valid_email = edt.getText().toString(); 
     } 
    } 

    boolean isEmailValid(CharSequence email) { 
     return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); 
    } 

    public void validation_Subject(EditText edt) { 
     if (edt.getText().toString().isEmpty()) { 
      edt.setError("Subject not be Empty "); 
      valid_sub = null; 
     } else if (edt.getText().toString().charAt(0) == ' ') { 
      edt.setError("First Letter Not be Space"); 
      valid_sub = null; 
     } else { 
      valid_sub = edt.getText().toString(); 
     } 
    } 

    public void validation_Message(EditText edt) { 
     Log.i("TAG", "maessage"); 
     if (edt.getText().toString().isEmpty()) { 
      edt.setError("Message not be Empty "); 
      valid_msg = null; 

     } else if (edt.getText().toString().charAt(0) == ' ') { 
      edt.setError("First Letter Not be Space"); 
      valid_msg = null; 
     } else { 
      edt.setError(null); 
      valid_msg = edt.getText().toString(); 
     } 
    } 

Также определяют orination манифеста

<application 
     android:allowBackup="true" 
     android:icon="@drawable/icon" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.my.Home" 
      android:configChanges="orientation" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.my.Careers" 
      android:configChanges="orientation" 
      android:windowSoftInputMode="stateHidden" > 
     </activity> 
     <activity 
      android:name="com.my.Services" 
      android:configChanges="orientation" > 
     </activity> 
     <activity 
      android:name="com.my.Contact_us" 
      android:configChanges="orientation|keyboardHidden" 
      android:windowSoftInputMode="stateHidden" > 
     </activity> 
     <activity 
      android:name="com.my.View_service" 
      android:configChanges="orientation" > 
     </activity> 
     <activity 
      android:name="com.my.Direction" 
      android:configChanges="orientation" > 
     </activity> 

ответ

0

При изменении ориентации все мнения регенерируется. Метод OnCreateView снова вызван, и TextChangedListener снова добавлен в editText View, который вызывает его метод и в конечном итоге setError вызывается в пустое editText. Чтобы проверить, была ли изменена ориентация экрана, и ничего не было введено в EditText, мы можем использовать Bundle, который переходит в метод активности OnCreate(), если активность вновь создана, этот пучок имеет значение null, но при изменении ориентации экрана его нет ноль. Проверьте приведенный ниже код, я внедрил его только для имени EditText, но я думаю, вам нужно будет сделать то же самое для всех EditText Views, поскольку это зависит от того, какой вид курсора находится при изменении ориентации. Объявите сверток в качестве члена класса, как,

Bundle mSavedInstanceState; 

и сохранить переданный пакет в нем в OnCreate() метод, как,

 if(savedInstanceState != null){ 
     this.mSavedInstanceState = savedInstanceState; 
    } 

теперь использовать этот пакет при проверке ошибки, если ее изменение ориентации (т. е. связка не будет равна нулю), не показывать ошибку ... Замените код ниже, Условия PSSome были неправильными, я исправил их, Надеюсь, это поможет ..! Сообщите мне, если это сработает для вас, и отметьте его как ответ, чтобы он был полезен другим.

public void validtion_name(EditText edt) throws NumberFormatException { 
    Log.i("TAG", "name"); 

    Log.i("TAG", String.valueOf(edt.length())); 
    if (edt.getText().toString().trim().length() <= 0 && mSavedInstanceState ==null) { 
     edt.setError("Accept Alphabets Only."); 
     valid_name = null; 
    } else if (edt.getText().toString().contains(" ")) { 
     edt.setError(null); 
    } else if (edt.getText().toString().trim().length() > 0 && !edt.getText().toString().matches("[a-zA-Z]+")) { 
     edt.setError("Accept Alphabets Only."); 
     valid_name = null; 
    } else if (edt.getText().toString().length() > 0) { 
     if(edt.getText().toString().charAt(0) == ' '){ 
      edt.setError("First Letter Not be Space "); 
      valid_name = null; 
     } 
    } else { 
     valid_name = edt.getText().toString(); 
    } 
    } 
+0

Спасибо @rj, но проблема не решена. – Techiee

+0

проверить измененный ответ –

Смежные вопросы