Как отключить Button, если EditText пуст?

У меня есть EditText и кнопка в моем приложении.

При нажатии кнопки текст, введенный в EditText, добавляется в ListView.

Я хочу отключить кнопку, если EditText пуст. Как это сделать?

Это мой код для нажатия кнопки

ImageButton imb=(ImageButton)findViewById(R.id.btn_send);
            imb.setOnClickListener(new OnClickListener()
            {
             @Override
             public void onClick(View arg0) 
             { 
                 EditText et = (EditText)findViewById(R.id.EditText1);

                  String str = et.getText().toString();
                  web1.add(str);
                  Toast.makeText(ShoutSingleProgram.this, "You entered...."+str, Toast.LENGTH_SHORT).show();
                  adapter1.notifyDataSetChanged();
                  et.setText("");

                    }
            });
            }

Как я могу это сделать?

Ответ 1

    editText1.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

           if(s.toString().trim().length()==0){
                button.setEnabled(false);
              } else {
                button.setEnabled(true);
              }
        }

        @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

        }
    });

Ответ 2

Используйте TextChangedListener и сначала отключите ImageButton в onCreate().

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

public class MyActivity extends Activity {

ImageButton imb;
EditText et;

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

    imb = (ImageButton) findViewById(R.id.btn_send);
    et = (EditText) findViewById(R.id.EditText1);

    imb.setEnabled(false); // set button disable initially

    et.addTextChangedListener(new TextWatcher() {

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

            if (s.toString().equals("")) {
                imb.setEnabled(false);
            } else {
                imb.setEnabled(true);
            }
        }

        @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

        }
    });

}

}

Ответ 3

Просто проверьте состояние в onCreate

if (et.getText().toString().trim().equals("")){
  button.setEnabled(false);
}
else{
button.setEnabled(true);
}

Ответ 4

Добавьте TextWatcher в свой EditText, чтобы при изменении текста внутри него кнопка включала или отключала себя.

Ответ 5

Изначально в onCreate() отключите кнопку. Затем добавьте текст addTextChangedListener в текст редактирования. в пределах которого проверяется длина edittext и отключается, если она равна 0 или иным образом разрешает ее

Ответ 6

Я использовал TextUtils для краткого решения:

    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            button.setEnabled(!TextUtils.isEmpty(s.toString().trim()));
        }

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

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

Ответ 7

в Oncreate(), перед нажатием кнопки вы должны проверить условие как,

   ImageButton imb=(ImageButton)findViewById(R.id.btn_send);
   EditText et = (EditText)findViewById(R.id.EditText1);
   if(et.getText().toString().equals("")
   {
   imb.setEnabled(false);
   }

   imb.setOnClickListener(new OnClickListener()
        {
         @Override
         public void onClick(View arg0) 
         { 
             EditText et = (EditText)findViewById(R.id.EditText1);

              String str = et.getText().toString();
              web1.add(str);
              Toast.makeText(ShoutSingleProgram.this, "You entered...."+str, Toast.LENGTH_SHORT).show();
              adapter1.notifyDataSetChanged();
              et.setText("");

                }
        });

Ответ 8

Если вы хотите отключить editText, вы будете использовать ниже код

editText.setEnabled(false); 
editText.setFocusable(false);

Ответ 9

вы проверяете статус edittext во время выполнения с помощью наблюдателя текста. ниже код подсчитывает длину текста и отключает, если длина равна нулю. используйте этот код:

EditText mEditText = new EditText(this);
    mEditText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            if (s.length() == 0) {
                button.setEnabled(false);
            }
                            else {
                            button.setEnabled(true);
                        }
        }

        @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

        }
    });

Ответ 10

Если вы хотите использовать объектно-ориентированное решение и повторно использовать свой код

public abstract class EmptyTextWatcher implements TextWatcher
{
    public abstract void onEmptyField();

    public abstract void onFilledField();

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count)
    {
        if (s.toString().trim().length() == 0)
        {
            onEmptyField();
        } else
        {
            onFilledField();
        }
    }

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

    }



    @Override
    public void afterTextChanged(Editable s)
    {

    }

}

чтобы вы могли использовать его, просто делая

textView.addTextChangedListener(new EmptyTextWatcher()
        {

            @Override
            public void onEmptyField()
            {
                button.setEnabled(false);
            }

            @Override
            public void onFilledField()
            {
                button.setEnabled(true);
            }
        });

Ответ 11

если кто-то задавался вопросом, вот версия кода kotlin

editText1.addTextChangedListener(object: TextWatcher {
        override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
            if (s.toString().trim({ it <= ' ' }).isEmpty())
            {
                button.setEnabled(false)
            }
            else
            {
                button.setEnabled(true)
            }
        }
        override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
                              after:Int) {
            // TODO Auto-generated method stub
        }
        override fun afterTextChanged(s: Editable) {
            // TODO Auto-generated method stub
        }
    })

Ответ 12

Супер простое решение

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

android:enabled="@{etName.text.length() > 0 &amp;&amp; etPassword.text.length() > 5}"

Что эквивалентно

button.setEnabled(etName.getText().length() > 0 && etPassword.getText().length() > 5 );
  • Здесь &amp; HTML-сущность, которая обозначает &. Там может быть любой оператор, как &.

  • etName и etPassword являются идентификаторами EditTexts.

Полный XML -

<LinearLayout
    >

    <EditText
        android:id="@+id/etName"
        />

    <EditText
        android:id="@+id/etPassword"
        />

    <Button
        android:enabled="@{etName.text.length() > 5 &amp;&amp; etPassword.text.length() > 5}"
        />

</LinearLayout>