Android: как отключить элементы списка при создании списка

Я довольно новичок в Android-разработчике и все еще много разбираюсь.

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

public class listTest extends ListActivity { @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); setListAdapter(ArrayAdapter.createFromResource(this, R.array.mainMenu, android.R.layout.simple_list_item_1)); //not sure how to disable list items here } protected void onListItemClick(ListView list, View view, int position, long id) { // can disable items when they are clicked on view.setEnabled(false); } } 

и у меня есть string-array в файле strings.xml:

    Item 1 Item 2 Item 3   

спасибо

Чтобы отключить элементы списка при создании списка, вы должны подclassом из ArrayAdapter . Вы должны переопределить следующие методы: isEnabled(int position) и areAllItemsEnabled() . В прежнем вы возвращаете true или false зависимости от того, включен ли элемент списка в заданной позиции или нет. В последнем вы возвращаете false .

Если вы хотите использовать createFromResource() вам также придется реализовать этот метод, так как ArrayAdapter.createFromResource() все еще создает ArrayAdapter вместо вашего собственного адаптера.

Наконец, код будет выглядеть примерно так:

 class MenuAdapter extends ArrayAdapter { public MenuAdapter( Context context, int textViewResId, CharSequence[] strings) { super(context, textViewResId, strings); } public static MenuAdapter createFromResource( Context context, int textArrayResId, int textViewResId) { Resources resources = context.getResources(); CharSequence[] strings = resources.getTextArray(textArrayResId); return new MenuAdapter(context, textViewResId, strings); } public boolean areAllItemsEnabled() { return false; } public boolean isEnabled(int position) { // return false if position == position you want to disable } } 

Я считаю, что элемент списка включен или нет, является частью состояния этого элемента, поэтому, я думаю, вам нужно управлять этим в своем ListAdapter . При подclassификации адаптера вы можете переопределить isEnabled(position) . Для любой позиции, которую вы вернете здесь, ListView помечает этот элемент как отключенный.

Итак, что вы хотите сделать, это примерно так:

 class MenuAdapter extends ArrayAdapter { public boolean isEnabled(int position) { // return false if position == positionYouWantToDisable } } 

Для этого, вероятно, требуется, например, Map управляющая включенным состоянием каждого элемента, если вы хотите включить / отключить элемент с помощью установщика.

Затем установите пользовательский адаптер в ListView.

Вы можете отключить элемент списка (= заставить его не реагировать на касания), вызвав оба

 setClickable(false) 

а также

 setFocusable(false) 

в вашем адаптере, например.

По умолчанию это графически не отображается автоматически.

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

Таким образом, элементы списка обычно рисуются, включая разделитель (см. Ответ Janusz на принятый ответ выше).

Или простой способ для регистрации и регистрации OnItemClickListener может быть лучшей идеей.

Зарегистрироваться:

lstDevice.setOnItemClickListener (контекст);

Для отмены регистрации:

lstDevice.setOnItemClickListener (нуль);

  • ЗАПРОС, ОПРЕДЕЛЕННЫЙ с помощью API-интерфейса Google Адресов для веб-сервера, используемого в приложении для Android
  • Android - Сохранить изображение с URL на SD-карту
  • Какая версия JDK (уровень языка) требуется для Android Studio?
  • как возобновить прерванную загрузку - часть 2
  • == и .equals () не работает в java
  • Android getIntent (). GetExtras () возвращает null
  • Может (a == 1 && a == 2 && a == 3) оценивать true в Java?
  • Устаревшая проблема с ManagedQuery ()
  • Как использовать WeakReference в разработке Java и Android?
  • Быстрое размытие растровых изображений для Android SDK
  • Volley - отправка запроса POST с использованием JSONArrayRequest
  • Давайте будем гением компьютера.