Предположим, у меня есть listview с 3 строками. Если пользователь нажимает кнопку в строке 1, она расширяет меню (это просто линейный макет, который отображается/скрыт). Если они затем нажмут на элемент в строке 2, я хотел бы иметь возможность свернуть меню в строке 1. Возможно ли это? Если да, то как?android access listview row из другой строки
ответ
Сохраните ссылку на представление, которое вы хотели бы обработать позже. Вероятно, оберните переменную final
, тогда вам будет легко изменить.
нИКОГДА не делать этого , Сохранение ссылки в представлении в режиме просмотра приведет к серьезным проблемам. Взгляды возвращаются на внутреннем уровне, как только они уходят с экрана, и попытка написать им будет в лучшем случае причиной сбоя. – CodeFusionMobile
да, CSharperWithjava прав ... это плохая идея ... – Ben
Я говорю это, потому что я попробовал это и все его багги ... – Ben
Вы всегда можете использовать getContext()
на View
, чтобы получить ссылку на вмещающий Activity
, который можно бросить в ListActivity
(при условии, что вы используете, что) и вызвать обычные методы для получения данных в этой позиции в ListAdapter:
((ListActivity) v.getContext()).getListAdapter().getItem(1)
Затем вы можете манипулировать данными, однако вы хотите и вызвать notifyDataSetChanged()
на вашем ListAdapter.
Но это, вероятно, будет много проще для вас и ваших пользователей просто использовать ExpandableListView
, который дают расширяемые списки с предсказуемыми взаимодействиями пользователей уже знают. Вы можете проверить активность истории в исходном коде браузера в AOSP для примера реальной жизни. И если это точно не соответствует вашим потребностям, вы всегда можете выдернуть код для ExpandableListView
из источника Android.
Хотелось бы, чтобы это было легко, к сожалению, расширяемый вид списка не будет делать то, что мне нужно. Кроме того, я не использую ListActivity. вместо этого у меня есть ListView, который находится внутри макета, который затем отображается обычной деятельностью ... – Ben
Ну, вам, вероятно, следует просто использовать ListActivity; это всего лишь легкая обертка вокруг нормальной активности, которая отслеживает ваш ListView/ListAdapter для вас довольно безболезненно. Но если вы по какой-то причине не хотите или не можете, вы можете либо сохранить ссылку на переменную-член в своем ListView/Adapter в своей деятельности, либо просто сделать это так (замените свой идентификатор listview для android. R.id.listview):.. '((ListActivity) v.getContext()) findViewById (android.R.id.listview) .getAdapter() GetItem (1)' и т.д. –
- 1. Custom ListView Row Android
- 2. ListView Selected Row Android
- 3. Android Listview SecondLine row
- 4. Android Listview Row Layout
- 5. «масштабирование» listview center row - android
- 6. Android ListView Refresh Single Row
- 7. Android ListView Custom Row Selection
- 8. Android ListView Highlight Selected Row
- 9. Android Listview row repeating item
- 10. Android ListView custom row overlay
- 11. Android ListView row padding/margin
- 12. Android listview row delete animation
- 13. appcelerator delete listview row?
- 14. ListView с настраиваемой строкой Row - Android
- 15. прокрутка Android ListView в TableView Row
- 16. Blanc row listview
- 17. android listview row с переменным количеством дочерних просмотров
- 18. Listview custom Row - недостаточно высокий
- 19. ListView Row Height Question
- 20. Android ListView Row Background вызывает OutOfMemory Issue
- 21. Изменение цвета из ListView Row Пункт
- 22. Android access Listview внутри RecyclerView
- 23. 1st Row of ListView Height
- 24. Android ListView Row с текстом и строкой с изображениями
- 25. Android listview row detail page slide
- 26. Реализация Android ListView с несколькими строками Row
- 27. Listview Row Обновление
- 28. Listview row divide и нажмите
- 29. Значение столбца ListView Selected Row
- 30. Как связать объект (данные) и ViewHolder (listview row) в android?
Вы делаете распространенную ошибку в том, как люди подходят к спискам просмотров. Вы пытаетесь контролировать listview из строк, для которых не было создано listview. Вместо этого вам следует подумать о том, как вы можете уведомить свою деятельность об изменении, чтобы ИТ-сервер мог обрабатывать изменения в listview. – CodeFusionMobile
CSharperWithJava, можете ли вы привести пример кода? скажем, вы хотите изменить текст TextView в строке 1 при нажатии кнопки в строке 2. Как вы это сделаете? – Ben