У цій статті я розповім про те, як зробити так, щоб елемент в ListView залишався виділеним після того, як користувач натисне на нього. Справа в тому, що за замовчуванням в Android кожен дочірній елемент списку виділяється тільки в той момент, коли користувач на нього натискає (або затискає його). Після того як він прибере з нього палець - виділення зникає. Часом в додатку необхідно виділяти який-небудь елемент ListView до тих пір, поки користувач не вибере інший і не натисне на нього. Зробити це нескладно.
Пропоную для прикладу створити новий проект з одним Activity. Після цього потрібно буде додати в Layout-файл для Activity (за замовчуванням - activity_main.xml) компонент ListView і дати йому ідентифікатор, наприклад, my_listview і додати властивість android: choiceMode = "singleChoice". Також потрібно буде створити layout для елементів списку (я вирішив назвати його listview_item.xml). У нього потрібно додати LinearLayout з id item_container і текстове поле (TextView) з id item_text.
Насамперед я задам значення кольорів для виділення елемента. Для цього слід створити файл ресурсів colors.xml в папці res / values і додати в нього такі рядки:
Для роботи зі списком буде використовуватися клас MyAdapter, який розширює клас BaseAdapter і перевизначає його методи. Його потрібно буде створити в класі MainActivity.
Оскільки для версій Android API нижче, ніж 11 властивість android: state_activated недоступно, то при відображенні view-елемента я буду здійснювати перевірку того, яка версія Android встановлена на пристрої, і якщо він буде нижче ніж 11, то view буде виділятися в такий спосіб:
Лістинг класу MyAdapter:
Тепер в методі onCreate потрібно буде створити адаптер і призначити його ListView.
Для того, щоб елементи списку виділялися після натискання, потрібно буде створити селектор, який буде змінювати колір виділення в залежності від умов. Для цього в папці res потрібно створити папку drawable. в якій потрібно створити два xml файлу з типом selector. Перший потрібен для того, щоб зафарбовувати фон виділеного View, а другий - щоб змінювати колір тексту. Я назвав їх item_background_selector.xml і item_text_selector.xml
У перший файл необхідно додати рядки:
Після цього потрібно відкрити файл listview_item.xml і додати наступне властивість для LinearLayout android: background = "@ drawable / item_background_selector" а для TextView додати властивість
Останнє, що залишилося зробити - створити і призначити ListView обробник натискання на його елементи із зазначенням, що його потрібно виділити.
А в метод onCreate потрібно додати рядок mListView.setOnItemClickListener (mItemClickListener);
Повний лістинг класу MainActivity: