Editable items в ListView
Є ListView забитий текстом (по рядку в item), хочеться щоб при натисканні на item полі можна буде редагувати і збоку два маленькі значки, підтвердити або скасувати.
Мені здається це має бути стандартний API. тільки не знаю, як зробити.
І ще питання наприклад як мені зробити, щоб можна було виділяти кілька item або є кнопочка - виділити все. Теж має бути стандартне API.
Або підкажіть де глянути як це робити.
А щодо зміни даних прямий у списку — якщо ви збираєтеся перевикористовувати юшку, що приходить у метод getView, вам необхідно в адаптері пам'ятати позицію елемента, що редагується, і в getView перевіряти, чи вона це, чи ні. І просто видавати відповідну юшку.
Тоді можна зробити приблизно такий адаптер:
І, відповідно, у потрібних ліснерах додавати/видаляти позицію зі списку mEditPositions. Сподіваюся зрозуміло як працює =)
PS: якщо комусь не подобається код і може запропонувати рішення краще – welcome :D
Ну звісно, все зрозуміло, але чи ви мене не до кінця зрозуміли, чи то я Вас… для початку: — я побудував список наприклад з 10 items, у кожному з них рядок. - зробив одиночний клік, view змінився.
У коді ви мені пропонуєте розрізняти, який view потрібно буде будувати, це зрозуміло, але! звідки мій адаптер знатиме, що я хочу в режимі реального часу відредагувати на приклад 5 item. Мається на увазі робота з ListView в реальному часі, а не в процесі його будівництва…
з приводу редагування елементів — як-от:
при цьому кореневий елемент у розмітці item'a має бути . Layout
Погана порада — якщо робити так, то після першого ж відходу елемента, що редагується, з екрану, почнетьсясвистопляска всього ListView. Т.к. у вашому прикладі змінена View v буде передана для відображення іншого елемента списку, але цього робити не треба. І в той же час, після повернення цієї позиції на екран, для її відтворення може бути передана інша юшка, і EditText пропаде.
Саме перевизначення методів getItemViewType і getViewTypeCount дозволяє не турбуватися про те, яка юшка нам приходить - вона прийде або вірна, або null в метод getView.