項目中涉及到 RecyclerView item 的切換,需要改變選中的背景 ,本着不麻煩ui小姐姐的原則 自己實現
效果圖:
基本思路是這樣的:
在Fragment或者Activity中做個標記currentPosition
在點擊了Item的時候將position記錄下來,並刷新適配器
然後在Adapter中設置回調監聽,繼承的BaseQuickAdapter,在convert()方法中設置回調監聽
最後在Fragment或者Activity使用監聽判斷當前位置是否和傳入的position是否一致
一致就設置選中的背景,不一致就要修改Item中的背景
具體實現:
Fragment或者Activity中:
private int currentPosition = 0;
mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
//這裏賦值
currentPosition = position;
//每點擊一次item就刷新適配器
mAdapter.notifyDataSetChanged();
}
});
mAdapter.setItemSelectedCallBack(new AmountInfoAdapter.ItemSelectedCallBack() {
@Override
public void convert(BaseViewHolder holder, int position) {
//初始化組件
ImageView bg = holder.getView(R.id.img_withdrawal_select);
//判斷傳入的position是否和當前一致
if (position == currentPosition) {
bg.setBackgroundResource(R.mipmap.icon_wytx_xuanzhong);
} else {
bg.setBackgroundResource(R.drawable.profit_withdrawal_amount_shape);
}
}
});
adapter中:
@Override
protected void convert(BaseViewHolder helper, AmountInfo item) {
helper.setText(R.id.tv_withdrawal_amount, "¥" + item.getAmount());
if (mCallBack != null) {
mCallBack.convert(helper, helper.getLayoutPosition());
}
}
public void setItemSelectedCallBack(ItemSelectedCallBack CallBack) {
this.mCallBack = CallBack;
}
public interface ItemSelectedCallBack {
void convert(BaseViewHolder holder, int position);
}
總結: 同理可修改 文字顏色背景色等其他的設置 隨意發揮