2014-01-27 4 views
0

Моя цель - получить ввод в полях редактирования текста. Идея состояла в том, чтобы отключить кнопку «отправить», пока пользователь не вводит все детали. Однако у меня возникла проблема, пытаясь это сделать.Как отключить кнопку только при отсутствии пользовательского ввода?

У меня нет проблем с намерениями или экранами.

Код:

public class Welcome extends Activity 
{ 

EditText efn,eln,eage; 
Button submit; 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_welcome); 




    efn=(EditText)findViewById(R.id.fname); 
    eln=(EditText)findViewById(R.id.lname); 
    eage=(EditText)findViewById(R.id.age); 
    submit=(Button)findViewById(R.id.submit); 


    submit.setEnabled(CheckIfOkInput()); 

             // I guess the problem is over here <-- 
if(CheckIfOkInput()==false) 
    { 
     while(CheckIfOkInput()) 
     { 
      efn=(EditText)findViewById(R.id.fname); 
      eln=(EditText)findViewById(R.id.lname); 
      eage=(EditText)findViewById(R.id.age); 
     } 

     submit.setEnabled(true); 
    } 



    submit.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 


       Intent iHome=new Intent (Welcome.this,Home_page.class); 
       String ln=eln.getText().toString(); 
       String fn=efn.getText().toString(); 
       int age=Integer.valueOf (eage.getText().toString()); 

       iHome.putExtra("fname", fn); 
       iHome.putExtra("lname", ln); 
       iHome.putExtra("age", age); 

       startActivity(iHome); 



     } 
    }); 


} 

    public boolean CheckIfOkInput() 
{ 

    if(this.eln.getText().toString()==""||this.efn.getText().toString()=="") 
    { 
     return false; 
    } 


    return true; 

} 

} 

И результат этого кода является то, что кнопка Submit просто держать отключенный навсегда.

Надеюсь, вы, ребята, могли мне помочь.

Заранее благодарен,

Yaniv.

ответ

2

Вы можете сделать что-то вроде следующего кода, на каждом EditText вы можете добавить слушателя, а когда текст EditText изменился, вы проверите, есть ли у обоих EditText тексты. Кстати, используйте метод .equals для сравнения строк, и вы можете использовать "".equals(this.eln.getText().toString()), чтобы избежать nullpointerexceptions, если this.eln.getText().toString() возвращает null.

editText.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if(!"".equals(this.eln.getText().toString()) && !"".equals(this.efn.getText().toString()){ 
      submit.setEnabled(true); 
     } 
    } 
} 
+0

Хорошо. Но для чего подходит EditTextLisnter? Я имею в виду - что он делает? – YanivGK

+1

Это слушатель, метод выше, onTextChanged, вызывается каждый раз, когда изменяется текст его edittext. Таким образом, каждый раз, когда пользователь пишет что-то на edittext, он вызывает onTextChanged и проверяет, имеют ли оба edittexts текст. – Giacomoni

+0

Хорошо, я понял теперь, и кнопка действительно отключается только тогда, когда есть текст. Но по какой-то причине кнопка не работает после того, как я ее нажимаю. и заставить приложение перестать работать. – YanivGK

0

Не используйте какое-то время, так как вы будете «делать» что-то все время. вам нужен слушатель. Точно так же, как onclick-listener для кнопки, но затем прослушиватель изменений для поля редактирования-текста

Метод: сделайте listeren, каждый раз (для начала вы можете обновить это позже) ваше изменение зарегистрировано, вы проверьте, пустое поле ввода. Если это так, вы отключите кнопку, иначе вы ее включите.

Создание ChangeListener легко найти, например: Counting Chars in EditText Changed Listener

Код в этом вопросе о подсчете символов, но это почти то, что вы хотите: подсчет символов, и если они равны 0 (или нет 0) что-то делать.

+0

Я новичок в этой программе, поэтому я вас плохо понимаю. Не могли бы вы быть более конкретными? – YanivGK

+0

Как - что делает EditTextListener? – YanivGK

+1

Он «прослушивает» изменения. Это то, что делают слушатели. Слушатель onclick ждет (слушает), чтобы вы нажали, а когда вы это сделаете, он «срабатывает». Onchangelistener ждет, пока не произойдет изменение (например, userinput), а затем пожары. Вам не нужно постоянно что-то проверять, вы можете просто «подождать» (слушать), чтобы что-то произошло, а затем проверить, добавлен ли персонаж. – Nanne

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