2013-06-12 2 views
1

Застрял на этом всю ночь, и там просто не кажется простым решением. Я пытаюсь проверить все 4 из моих полей, чтобы убедиться, что в каждом из них есть значение, если в каждом из них есть значение, после того как я нажму кнопку «Рассчитать», будет рассчитано общее число. Если какой-либо из них не имеет значения в них, он будет возвращать ошибку в каждом EditText, который не имеет значения, и общая сумма не будет вычисляться.Проверка нескольких EditTexts

cal.setOnClickListener(new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       // TODO Auto-generated method stub 
       if(eLoan.getText().toString().length() == 0) 
       { 
        eLoan.setError("A value is required"); 
       } 
       else if(eWage.getText().toString().length() == 0) 
       { 
        eWage.setError("A value is required"); 
       } 
       else if(eGrant.getText().toString().length() == 0) 
       { 
        eGrant.setError("A value is required"); 
       } 
       else if(eOther.getText().toString().length() == 0) 
       { 
        eOther.setError("A value is required"); 
       } 
       else 
       convertToString(); 
       converToDouble();    
       inTotal = inLoan + inWage + inGrant + inOther; 
       DecimalFormat currency = new DecimalFormat(".00"); 
       TotalInNum.setText("£" + currency.format(inTotal)); 
      } 

     }); 

я не могу получить мою голову вокруг него, я попытался включить логическое выражение для проверки каждого EditText, но это не сработало. Я убежден, что есть более простой способ сделать это.

Я совершенно новичок в андроиде, сам себя обучая, поэтому я был бы признателен, если бы люди могли посоветовать мне, что я делаю неправильно, и, возможно, дать мне пример того, что я должен делать.

Спасибо всем, кто отвечает.

ответ

2

Я думаю, проблема в том, что вам не хватает колеев на последнем else, где сидит логика. Как сейчас, только convertToString(); является частью последнего else, и последние четыре оператора будут выполняться независимо от того, какую ошибку вы устанавливаете.

Попробуйте это:

cal.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     boolean failFlag = false; 
     // TODO Auto-generated method stub 
     if(eLoan.getText().toString().trim().length() == 0) 
     { 
      failFlag = true; 
      eLoan.setError("A value is required"); 
     } 
     if(eWage.getText().toString().trim().length() == 0) 
     { 
      failFlag = true; 
      eWage.setError("A value is required"); 
     } 
     if(eGrant.getText().toString().trim().length() == 0) 
     { 
      failFlag = true; 
      eGrant.setError("A value is required"); 
     } 
     if(eOther.getText().toString().trim().length() == 0) 
     { 
      failFlag = true;     
      eOther.setError("A value is required"); 
     } 
     // if all are fine 
     if (failFlag == false) { 
      convertToString(); 
      converToDouble();    
      inTotal = inLoan + inWage + inGrant + inOther; 
      DecimalFormat currency = new DecimalFormat(".00"); 
      TotalInNum.setText("£" + currency.format(inTotal)); 
     } 
    } 

}); 

Этот код устанавливается более одной ошибки, если еще неразрешенные проблемы. Ваш сигнал будет сигнализировать только о первой найденной ошибке.

+0

Это отлично работает. У меня были проблемы с получением более 1 ошибки, однако, когда я помещал все операторы if в первый оператор if, я мог бы их упорядочить, но не второй/3rd/4th EditText на своем собственном. Бесконечно благодарен! Было так расстраивать, не зная, что делать. –

+0

У меня есть лишнее сомнение, у меня есть четыре текста редактирования, когда у кого-то есть ценность, он идет вперед. если четыре имеют нулевую ошибку. Как это проверить –

0

поздний ответ Но может помочь кому-то в этом нуждается.

Простейший путь ->

Создать метод, как показано ниже

public Boolean validateUserInput() 
    { 
     Boolean isAnyFieldsEmpty=false; 

     if (position.getText().toString()==null || position.getText().toString().equalsIgnoreCase("")) 
     { 
      position.setError("Empty postion"); 
      isAnyFieldsEmpty=true; 
     } 
     else{ 
      position.setError(null); 
      isAnyFieldsEmpty=false; 
     } 

     if (eligiblity.getText().toString()==null || eligiblity.getText().toString().equalsIgnoreCase("")) 
     { 
      eligiblity.setError("Empty postion"); 
      isAnyFieldsEmpty=true; 
     } 
     else{ 
      eligiblity.setError(null); 
      isAnyFieldsEmpty=false; 
     } 

     if (skillsRequired.getText().toString()==null || skillsRequired.getText().toString().equalsIgnoreCase("")) 
     { 
      skillsRequired.setError("Empty postion"); 
      isAnyFieldsEmpty=true; 
     } 
     else{ 
      skillsRequired.setError(null); 
      isAnyFieldsEmpty=false; 
     } 

     if (desc.getText().toString()==null || desc.getText().toString().equalsIgnoreCase("")) 
     { 
      desc.setError("Empty postion"); 
      isAnyFieldsEmpty=true; 
     } 
     else{ 
      desc.setError(null); 
      isAnyFieldsEmpty=false; 
     } 

     if (interviewFrmDate.getText().toString()==null || interviewFrmDate.getText().toString().equalsIgnoreCase("")) 
     { 
      interviewFrmDate.setError("choose date"); 
      isAnyFieldsEmpty=true; 
     }else{ 
      interviewFrmDate.setError(null); 
      isAnyFieldsEmpty=false; 
     } 

     if (interviewToDate.getText().toString()==null || interviewToDate.getText().toString().equalsIgnoreCase("")) 
     { 
      interviewToDate.setError("choose date"); 
      isAnyFieldsEmpty=true; 
     }else{ 
      interviewToDate.setError(null); 
      isAnyFieldsEmpty=false; 
     } 

     if (interviewToTime.getText().toString()==null || interviewToTime.getText().toString().equalsIgnoreCase("")) 
     { 
      interviewToTime.setError("choose date"); 
      isAnyFieldsEmpty=true; 
     }else{ 
      interviewToTime.setError(null); 
      isAnyFieldsEmpty=false; 
     } 

     return isAnyFieldsEmpty; 
    } 

Теперь на кнопке нажмите вызов, метод, как показано ниже, и проверить

@overide 
public void onclick 
{ 
Boolean isinputEmpty=validateUserInput() 
if(isinputEmpty==false) 
{ 

///process your save or whatever processing it is 
} 

} 
4

Просто построить на то, что других сказал. Вы можете сделать что-то вроде этого ...

сделать метод проверки, что петли через ваши EditTexts, проверяет, есть ли они пусты, если верно множество ошибок, а затем возвращает истину или ложь ...

public boolean validateEditText(int[] ids) 
{ 
    boolean isEmpty = false; 

    for(int id: ids) 
    { 
     EditText et = (EditText)findViewById(id); 

     if(TextUtils.isEmpty(et.getText().toString())) 
     { 
      et.setError("Must enter Value"); 
      isEmpty = true; 
     } 
    } 

    return isEmpty; 
} 

Составьте список вас EditText идентификаторами ..

int[] ids = new int[] 
{ 
    R.id.section1_item1_textfield, 
    R.id.section1_item2_textfield, 
    R.id.section1_item3_textfield 
}; 

Теперь использовать метод проверки для пустой ...

if(!validateEditText(ids)) 
{ 
    //if not empty do something 
}else{ 
    //if empty do somethingelse 
} 

Для использования метода выше вам нужно будет ...

import android.text.TextUtils; 

Хорошая вещь о делать это таким образом, что вы можете просто бросить все ваши EditTexts в список и он сделает все остальное за вас. Поддержание огромного количества выражений if может быть раздражающим и трудоемким.

0

Я думаю, что лучший способ решить эту проблему на примере ниже:

private boolean verifyIfEditTextIsFilled(EditText... editText) { 

    boolean result = true; 

    for (EditText text : editText) { 

     if (text.getText().toString().isEmpty()) { 

      final View focusView = text; 
      text.setError(getString(R.string.error_required)); 
      focusView.requestFocus(); 
      result = false; 
     } 
    } 
    return result; 
} 
Смежные вопросы