Как отключить кнопку Android?

Я создал макет, содержащий две кнопки: «Далее» и «Предыдущий». Между кнопками я генерирую некоторые динамические представления. Поэтому, когда я впервые запускаю приложение, я хочу отключить кнопку «Предыдущая», так как не будет никаких предыдущих просмотров. Я также хочу отключить кнопку «Далее», если на дисплее больше нет просмотров. Есть ли способ отключить кнопки?

Скриншот образца макета

Solutions Collecting From Web of "Как отключить кнопку Android?"

Вы попробовали это?

myButton.setEnabled(false); 

Обновление: благодаря Гвен. Почти забыл, что android:clickable можно установить в вашем XML-макете, чтобы определить, можно ли нажать кнопку или нет.

Вы не можете включить его или отключить в своем XML (поскольку ваш макет установлен во время выполнения), но вы можете установить, можно ли его активировать при запуске с помощью android:clickable .

Вы просто пишете одну строку кода в своей деятельности

 Button btn = (Button) findViewById(R.id.button1); btn.setEnabled(false); 

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

 Button btn = (Button) findViewById(R.id.button1); btn.setEnabled(true); 

В Java, если у вас есть ссылка на кнопку:

 Button button = (Button) findviewById(R.id.button); 

Чтобы включить / отключить кнопку, вы можете использовать:

 button.setEnabled(false); button.setEnabled(true); 

Или:

 button.setClickable(false); button.setClickable(true); 

Поскольку вы хотите отключить кнопку с самого начала, вы можете использовать button.setEnabled (false); В методе onCreate. В противном случае, из XML, вы можете напрямую использовать:

 android:clickable = "false" 

Так:

 <Button android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button_text" android:clickable = "false" /> 

В моем случае,

 myButton.setEnabled(false); myButton.setEnabled(true); 

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

 myButton.invalidate(); myButton.refreshDrawableState(); 

Если вы или кто-либо, у кого есть аналогичная проблема, то, что работает для меня, снова устанавливает фону. Работает на любом уровне API.

 myButton.setEnabled(true); myButton.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.myButtonDrawable)); 

Да, его можно отключить в xml, просто используйте <Button android:enabled="false"/>

Сначала в xml сделать кнопку как android:clickable="false"

 <Button android:id="@+id/btn_send" android:clickable="false"/> 

oncreate() в вашем коде внутри oncreate() устанавливается свойство кнопки как

 btn.setClickable(true); 

Затем внутри кнопки нажмите изменить код на

 btn.setClickable(false); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); btnSend = (Button) findViewById(R.id.btn_send); btnSend.setClickable(true); btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } }); } 

НЕПРАВИЛЬНЫЙ ПУТЬ В ПРОСЛУШИВАНИИ ИСПОЛЬЗОВАТЬ ПЕРЕМЕННЫЙ ВМЕСТО ПАРАМЕТРА !!!

 btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } }); 

ПРАВИЛЬНО:

 btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /** check given view by assertion or cast as u wish */ if(v instance of Button) { /** cast */ Button button = (Button) v; /** we can perform some check up */ if(button.getId() == EXPECTED_ID) { /** disable view */ button.setEnabled(false) button.setClickable(false); } } else { /** you can for example find desired view by root view */ Button bt = (Button) v.getRootView().findViewById(R.id.btId); /*check for button */ if(bt!=null) { /** disable button view */ ... } else { /** according to @jeroen-bollen remark * we made assumption that we expected a view * of type button here in other any case */ throw new IllegalArgumentException("Wrong argument: " + "View passed to method is not a Button type!"); } } } }); 

EDIT: В ответ на @ jeroen-bollen

  View.OnClickListener 

Определение интерфейса для обратного вызова, вызываемого при нажатии на просмотр.

С определением метода

 void onClick(View v); 

При щелчке по представлению объект класса View делает обратный вызов методу onClick (), отправляющемуся как параметр, поэтому параметр null view не должен возникать, если он вызывает ошибку утверждения, это может произойти, например, когда класс объекта View был уничтожен тем временем (для Пример, собранный GC) или метод был взломан из-за взлома

Немного о instanceof & null

JLS / 15.20.2. Тип сравнения Оператор instanceof

Во время выполнения результат оператора instanceof является истинным, если значение RelationalExpression не является нулевым, и ссылка может быть передана в ReferenceType без повышения исключения ClassCastException.

В противном случае результат будет ложным .


Три слова от автора

ЕСЛИ ЕСЛИ ПОКАЗАТЬ?

САМЫЙ, ЧТОБЫ ИЗБЕЖАТЬ NullPointerException

Еще немного кода сэкономит ваше время на последующем отслеживании ошибок в вашем коде и уменьшит возникновение аномалий.

Рассмотрим следующий пример:

 View.OnClickListener listener = new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } }); btnSend.setOnClickListener(listener) btnCancel.setOnClickListener(listener)