2010-07-06 3 views
0

Предположим, у меня есть listview с 3 строками. Если пользователь нажимает кнопку в строке 1, она расширяет меню (это просто линейный макет, который отображается/скрыт). Если они затем нажмут на элемент в строке 2, я хотел бы иметь возможность свернуть меню в строке 1. Возможно ли это? Если да, то как?android access listview row из другой строки

+0

Вы делаете распространенную ошибку в том, как люди подходят к спискам просмотров. Вы пытаетесь контролировать listview из строк, для которых не было создано listview. Вместо этого вам следует подумать о том, как вы можете уведомить свою деятельность об изменении, чтобы ИТ-сервер мог обрабатывать изменения в listview. – CodeFusionMobile

+0

CSharperWithJava, можете ли вы привести пример кода? скажем, вы хотите изменить текст TextView в строке 1 при нажатии кнопки в строке 2. Как вы это сделаете? – Ben

ответ

1

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

+0

нИКОГДА не делать этого , Сохранение ссылки в представлении в режиме просмотра приведет к серьезным проблемам. Взгляды возвращаются на внутреннем уровне, как только они уходят с экрана, и попытка написать им будет в лучшем случае причиной сбоя. – CodeFusionMobile

+0

да, CSharperWithjava прав ... это плохая идея ... – Ben

+0

Я говорю это, потому что я попробовал это и все его багги ... – Ben

1

Вы всегда можете использовать getContext() на View, чтобы получить ссылку на вмещающий Activity, который можно бросить в ListActivity (при условии, что вы используете, что) и вызвать обычные методы для получения данных в этой позиции в ListAdapter:

((ListActivity) v.getContext()).getListAdapter().getItem(1) 

Затем вы можете манипулировать данными, однако вы хотите и вызвать notifyDataSetChanged() на вашем ListAdapter.

Но это, вероятно, будет много проще для вас и ваших пользователей просто использовать ExpandableListView, который дают расширяемые списки с предсказуемыми взаимодействиями пользователей уже знают. Вы можете проверить активность истории в исходном коде браузера в AOSP для примера реальной жизни. И если это точно не соответствует вашим потребностям, вы всегда можете выдернуть код для ExpandableListView из источника Android.

+0

Хотелось бы, чтобы это было легко, к сожалению, расширяемый вид списка не будет делать то, что мне нужно. Кроме того, я не использую ListActivity. вместо этого у меня есть ListView, который находится внутри макета, который затем отображается обычной деятельностью ... – Ben

+0

Ну, вам, вероятно, следует просто использовать ListActivity; это всего лишь легкая обертка вокруг нормальной активности, которая отслеживает ваш ListView/ListAdapter для вас довольно безболезненно. Но если вы по какой-то причине не хотите или не можете, вы можете либо сохранить ссылку на переменную-член в своем ListView/Adapter в своей деятельности, либо просто сделать это так (замените свой идентификатор listview для android. R.id.listview):.. '((ListActivity) v.getContext()) findViewById (android.R.id.listview) .getAdapter() GetItem (1)' и т.д. –

Смежные вопросы