1 回答
TA贡献1802条经验 获得超6个赞
所以我终于能够在自己的项目中尝试这一点。
回答 在 BindViewHolder 中,单击某个项目后,保存该项目的位置值。然后在单击事件中调用notifyDataSetChanged,这将刷新适配器。现在它获取您的结果,BindViewHolder 内部有一个 if 语句检查该值是否应相应设置(或不可见),否则显示为可见。
示例代码
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();
}
}
这是我自己的项目,当我选择一个项目时,它会将背景资源更改为选定状态,然后其余部分返回到默认状态。
添加回答
举报