2015-11-19 4 views
1

Я пытаюсь создать ListView, в котором вы можете одновременно выбрать не более 4 элементов. Эти предметы должны быть смежными друг с другом.ListView - получить смежные элементы щелкнутого элемента

Когда я нажимаю на свой первый элемент, я хочу посмотреть, не нажал ли предыдущий ИЛИ следующий элемент.

Примечание: Когда я нажимаю элемент, я меняю цвет фона. Поэтому, если я хочу узнать, щелкнули ли элемент или нет, я просто хочу проверить цвет фона.

public void OnItemClick(AdapterView<?> parent, View, view, int position, long id){ 

    View currentItem = view; 
    currentItem.setBackgroundResource(R.drawable.li_gradient); 

    // How do I get the view in front of and behind currentItem 
    // to check their current background color? (Assuming they exist) 

} 

ответ

0

Вы должны сделать это в своем классе адаптера, элемент модели должен иметь свойство ресурса фона.

Просто бросить адаптер, получить предыдущий или следующий элемент, установите новый фон и уведомить ListView

public void OnItemClick(AdapterView<?> parent, View, view, int position, long id){ 

    YourAdapterClass adapter = (YourAdapterClass) parent.getAdapter(); 

    // TODO check if is a valid position 
    YourItem item = (YourItem) adapter.getItem(position-1); 
    item.setBackgroundResource(R.drawable.li_gradient); 

    adapter.notifyDataSetChanged(); 
} 
0

Имейте в виду, что если деятельность воссоздан (из-за изменения конфигурации, например), или если просмотр списка перерисовывается (например, когда он уведомляется об изменении), он не будет автоматически знать об изменениях, внесенных в представление в методе onClick, и изменения фона могут быть потеряны. Я бы сделал пользовательский AdapterView с помощью таких методов, как itemSelected (int i), clearAllSelected(), getSelectedItems() и т. Д. И сделал переходным пунктом одну точку ответственности для отслеживания и поддержки этих изменений и для рендеринга фона.

Kaamel

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