2016-03-04 4 views
2

Я меняю фон, когда какой-то предмет выбран в моей ListView, но каждый раз, когда я прокручиваю вниз, я теряю выбранные элементыListView - теряя выбранные элементы после прокрутки вниз

selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@android:color/darker_gray" android:state_selected="true"/> 
</selector> 

адаптер

holder.cardView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    boolean selected = v.isSelected(); 
    v.setSelected(!selected); 
    } 
}); 

Как я могу держать фоновое состояние?

+1

Просьба указать полный класс адаптера –

+1

Адаптер повторно использует свои представления при прокрутке. Читайте об этом, есть много вопросов и ответов об этом на SO. –

ответ

4

Ваши взгляды перерабатываются. Вам нужно отслеживать выбранные виды в другом месте (например, список целых чисел, в которых вы сохраняете позицию выбранных представлений).

Затем в вашем адаптере, в getView, вы устанавливаете выбранное значение, основанное на том, содержит ли ваш список позицию или нет.

public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    view.setSelected(mSelected.contains(position)); 
    ... 
} 
0

Лучше использовать выбор ListView вместо:

listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
listView.setItemChecked(itemPosition, true); 

Или вы должны вызвать view.setSelected в вашем адаптере GetView каждый раз. Причина, по которой выбранное состояние теряется после того, как просмотр переработан.

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