解決思路如下韩脏,
記錄兩個位置缩麸,當(dāng)前選中以及上次選中的Item的位置铸磅,并記錄Item是否選中赡矢,那么在Adapter中我們只需要根據(jù)Item是否選中來設(shè)置它的背景色杭朱。
具體代碼如下:
ListItem listItem = generateAdapter.getData().get(position);
//listItemTemp 上一個選中 listItem 當(dāng)前選中
if (listItemTemp != null && lastIndex !=-1){
listItemTemp.setSelect(false);
generateAdapter.notifyItemChanged(lastIndex);
}
lastIndex = position;
listItem.setSelect(true);
generateAdapter.notifyItemChanged(position);
listItemTemp = listItem;
listItemTemp記錄上一個選中,listItem是當(dāng)前選中吹散,lastIndex是上一個Item的坐標(biāo)弧械,position是當(dāng)前選中Item的坐標(biāo)。然后Adapter只更新相對應(yīng)的坐標(biāo)空民。
Adapter只更新只做了相對應(yīng)改變的那一項,Adapter中的更新代碼如下:
if (!listItem.isSelect()){
viewHolder.relativeLayout.setBackgroundColor(Color.WHITE);
}else {
viewHolder.relativeLayout.setBackgroundColor(Color.parseColor("#ff00ff"));
}
當(dāng)然我們在這里將數(shù)據(jù)模型中增加了一個記錄是否選中的方法:
public boolean isSelect() {
return select;
}
public void setSelect(boolean select) {
this.select = select;
}