1 回答

TA貢獻(xiàn)1802條經(jīng)驗 獲得超6個贊
所以我終于能夠在自己的項目中嘗試這一點。
回答 在 BindViewHolder 中,單擊某個項目后,保存該項目的位置值。然后在單擊事件中調(diào)用notifyDataSetChanged,這將刷新適配器。現(xiàn)在它獲取您的結(jié)果,BindViewHolder 內(nèi)部有一個 if 語句檢查該值是否應(yīng)相應(yīng)設(shè)置(或不可見),否則顯示為可見。
示例代碼
public class SelectorAdapter extends RecyclerView.Adapter<SelectorAdapter.ItemHolder> implements View.OnClickListener {
private List itemList;
private int selectedKey;
public SelectorAdapter(List list) {
itemList = list;
}
@Override
public void onClick(View v) {
}
/* ViewHolder for each item */
class ItemHolder extends RecyclerView.ViewHolder {
//title
@BindView(R.id.selector_title)
TextView title;
@BindView(R.id.selector_layout)
LinearLayout selector;
ItemHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
@Override
public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_layout_selector, parent, false);
return new ItemHolder(itemView);
}
@Override
public void onBindViewHolder(ItemHolder holder, int position) {
String title = (String) itemList.get(position);
holder.title.setText(title);
if (position != selectedKey) {
holder.title.setBackgroundResource(R.drawable.selector);
} else {
holder.title.setBackgroundResource(R.drawable.selector_selected);
}
holder.itemView.setOnClickListener(v -> {
Timber.e("selected item: %s", position);
selectedKey = position;
notifyDataSetChanged();
});
}
@Override
public int getItemCount() {
Timber.e("itemCount: %s", itemList.size());
return itemList.size();
}
}
這是我自己的項目,當(dāng)我選擇一個項目時,它會將背景資源更改為選定狀態(tài),然后其余部分返回到默認(rèn)狀態(tài)。
添加回答
舉報