这是 @TonicArtos 提到的添加和删除项目并在执行时为其设置动画的示例代码,取自 RecyclerView Animations 和 GitHub sample
1) 在 onCreateViewHolder() 中添加监听器以注册 onClick
2) 在您的适配器中创建您的自定义 OnClickListener
private View.OnClickListener mItemListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) v.findViewById(R.id.tvItems);
String selected = tv.getText().toString();
boolean checked = itemsList.get(recyclerView.getChildAdapterPosition(v)).isChecked();
switch (selected){
case "Item1":
if(checked){
deleteItem(v);
itemsList.get(recyclerView.getChildAdapterPosition(v)).setChecked(false);
}else {
addItem(v);
itemsList.get(recyclerView.getChildAdapterPosition(v)).setChecked(true);
}
break;
case "Item2":
if(checked){
deleteItem(v);
itemsList.get(recyclerView.getChildAdapterPosition(v)).setChecked(false);
}else {
addItem(v);
itemsList.get(recyclerView.getChildAdapterPosition(v)).setChecked(true);
}
break;
default:
//In my case I have checkList in subItems,
//checkItem(v);
break;
}
}
};
3) 添加您的 addItem() 和 deleteItem()
private void addItem(View view){
int position = recyclerView.getChildLayoutPosition(view);
if (position != RecyclerView.NO_POSITION){
navDrawItems.add(position+1,new mObject());
navDrawItems.add(position+2,new mObject());
notifyItemRangeInserted(position+1,2);
}
}
private void deleteItem(View view) {
int position = recyclerView.getChildLayoutPosition(view);
if (position != RecyclerView.NO_POSITION) {
navDrawItems.remove(position+2);
navDrawItems.remove(position+1);
notifyItemRangeRemoved(position+1,2);
}
}
4) 如果您的 RecyclerViewAdapter 与 RecyclerView 不在同一个 Activity 中,则在创建时将 recyclerView 的实例传递给 Adapter p>
5) itemList 是一个 mObject 类型的 ArrayList,它有助于维护项目状态(打开/关闭)、名称、项目类型(子项目/主项目)和设置基于价值观的主题
public class mObject{
private String label;
private int type;
private boolean checked;
}