請按照以下方法使用,如this所示。
private List<DetectedIssue> issues = new ArrayList<DetectedIssue>();
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
issues.remove(position);
notifyItemRemoved(position);
//this line below gives you the animation and also updates the
//list items after the deleted item
notifyItemRangeChanged(position, getItemCount());
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
@Override
public int getItemCount() {
return issues.size();
}
PS:如可以從documentation可以看出它是壞的做法是使用notifyDataSetChanged()
如果僅一個項被添加,移動或不必要的過程運行中移除。
此事件並未指定數據集已更改的內容,強制任何觀察者都假定所有現有項目和結構可能不再有效。 LayoutManagers將被迫完全重新綁定並重新佈局所有可見的視圖。
如果您希望更改某些活動中的基礎數組列表,則必須使用接口與活動進行通信以更改數組列表。