Java 已从ArrayList中删除项,但notifyDataSetChanged()仅删除底部项
我有一个recycler视图,其中包含来自自定义对象的ArrayList。 每行都有一个删除按钮,单击该按钮后,该项目将从recyclerview中删除。 现在“删除”按钮可以工作,并从arraylist中删除正确的项目,但是当项目再次显示在列表中时,仅删除底部的项目,而真正从列表中删除的项目仍保留在那里 这真的很奇怪,我不知道为什么 我管理活动中删除的项目,以下是活动的代码:Java 已从ArrayList中删除项,但notifyDataSetChanged()仅删除底部项,java,android,arraylist,android-recyclerview,Java,Android,Arraylist,Android Recyclerview,我有一个recycler视图,其中包含来自自定义对象的ArrayList。 每行都有一个删除按钮,单击该按钮后,该项目将从recyclerview中删除。 现在“删除”按钮可以工作,并从arraylist中删除正确的项目,但是当项目再次显示在列表中时,仅删除底部的项目,而真正从列表中删除的项目仍保留在那里 这真的很奇怪,我不知道为什么 我管理活动中删除的项目,以下是活动的代码: public class ManageExerciseActivity extends AppCompatActivi
public class ManageExerciseActivity extends AppCompatActivity {
private static final String TAG = "999.OffLimitsActivity";
private RecyclerView exerciseRecyclerView;
private ExerciseManageAdapter exerciseAdapter;
public ArrayList<Exercise> exerciseList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_exercise);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ManageExerciseActivity.this, AddExerciseActivity.class);
startActivity(intent);
}
});
fab.setImageBitmap(textAsBitmap("ADD", 40, Color.WHITE));
exerciseList = new ArrayList<>();
getSupportActionBar().setTitle("Manage my exercises");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
exerciseRecyclerView = (RecyclerView) findViewById(R.id.exercise_manage_recycler_view);
exerciseAdapter = new ExerciseManageAdapter(exerciseList);
exerciseAdapter.setOnItemClickListener(new ExerciseManageAdapter.ClickListener() {
@Override
public void onItemClick(final int position, final View v) {
Log.d(TAG, "onItemClick pos = " + position);
// custom dialog
AlertDialog.Builder builder = new AlertDialog.Builder(ManageExerciseActivity.this);
builder.setMessage("Do you wish to delete this exercise?")
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
String itemRemoved = exerciseList.get(position).getNameOfExercise();
exerciseList.remove(position);
exerciseAdapter.notifyDataSetChanged();
Snackbar.make(v, itemRemoved + " deleted", Snackbar.LENGTH_LONG)
.setAction("Undo", null).show();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
builder.create();
builder.show();
}
});
exerciseRecyclerView.setAdapter(exerciseAdapter);
exerciseRecyclerView.setLayoutManager(new LinearLayoutManager(this));
}
公共类ManageExerciseActivity扩展了AppCompativeActivity{
私有静态最终字符串TAG=“999.OffLimitsActivity”;
私人回收视图;
私有ExerciseManageAdapter exerciseAdapter;
公共ArrayList练习表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u manage\u练习);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(ManageExerciseActivity.this,AddExerciseActivity.class);
星触觉(意向);
}
});
制作setImageBitmap(textAsBitmap(“添加”,40,颜色.白色));
exerciseList=新的ArrayList();
getSupportActionBar().setTitle(“管理我的练习”);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
exerciseRecyclerView=(RecyclerView)findViewById(R.id.exercise\u manage\u recycler\u view);
exerciseAdapter=新的ExerciseManageAdapter(exerciseList);
exerciseAdapter.setOnItemClickListener(新的ExerciseManageAdapter.ClickListener(){
@凌驾
公共视图(最终整型位置,最终视图v){
Log.d(标签“onItemClick pos=“+位置”);
//自定义对话框
AlertDialog.Builder=新建AlertDialog.Builder(ManageExerciseActivity.this);
setMessage(“是否要删除此练习?”)
.setPositiveButton(R.string.yes,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
String itemRemoved=exerciseList.get(position).getNameOfExercise();
练习表。移除(位置);
exerciseAdapter.notifyDataSetChanged();
Snackbar.make(v,itemRemoved+“deleted”,Snackbar.LENGTH\u LONG)
.setAction(“撤消”,null).show();
}
})
.setNegativeButton(R.string.cancel,新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
//用户取消了该对话框
}
});
//创建AlertDialog对象并返回它
builder.create();
builder.show();
}
});
exerciseRecyclerView.setAdapter(exerciseAdapter);
exerciseRecyclerView.setLayoutManager(新的LinearLayoutManager(此));
}
这是适配器:
public class ExerciseManageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static ClickListener clickListener;
public ImageView exerciseItemIcon;
public TextView exerciseNameTextView;
public TextView exerciseDurationTextView;
public TextView exerciseTimesRemainingTextView;
public ImageView deleteImageView;
ArrayList<Exercise> exerciseArrayList = new ArrayList<>();
public ExerciseManageAdapter(ArrayList<Exercise> exerciseArrayList) {
this.exerciseArrayList = exerciseArrayList;
}
public interface ClickListener {
void onItemClick(int position, View v);
}
class ExerciseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public ExerciseViewHolder(View view) {
super(view);
// view.setOnClickListener(this);
exerciseNameTextView = (TextView)view.findViewById(R.id.exercise_manage_name_textView);
exerciseDurationTextView = (TextView)view.findViewById(R.id.exercise_manage_duration_textview);
exerciseTimesRemainingTextView = (TextView)view.findViewById(R.id.exercise_manage_times_remaining);
exerciseItemIcon = (ImageView)view.findViewById(R.id.exercise_manage_item_icon);
deleteImageView = (ImageView)view.findViewById(R.id.delete_exercise_button);
deleteImageView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
clickListener.onItemClick(getAdapterPosition(), v);
}
}
public void setOnItemClickListener(ClickListener clickListener) {
ExerciseManageAdapter.clickListener = clickListener;
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getItemCount() {
return exerciseArrayList.size();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.exercise_manage_item_row, parent, false);
return new ExerciseViewHolder(itemView);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
ExerciseViewHolder exerciseViewHolder = (ExerciseViewHolder) holder;
exerciseNameTextView.setText(exerciseArrayList.get(position).getNameOfExercise());
exerciseDurationTextView.setText(exerciseArrayList.get(position).getDurationOfExercise());
exerciseTimesRemainingTextView.setText(exerciseArrayList.get(position).getTimesPerWeek() + " times a week");
exerciseItemIcon.setImageResource(exerciseArrayList.get(position).getExerciseIcon());
}
}
public类ExerciseManageAdapter扩展了RecyclerView.Adapter{
私有静态ClickListener ClickListener;
公共图像视图项目图标;
公共文本视图exerciseNameTextView;
公共文本视图exerciseDurationTextView;
公共文本视图exerciseTimesRemainingTextView;
公共图像视图删除图像视图;
ArrayList exerciseArrayList=新建ArrayList();
公共ExerciseManageAdapter(ArrayList exerciseArrayList){
this.exerciseArrayList=exerciseArrayList;
}
公共界面ClickListener{
虚线单击(内部位置,视图v);
}
类ExerciseViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
public ExerciseViewHolder(视图){
超级(视图);
//view.setOnClickListener(这个);
exerciseNameTextView=(TextView)view.findViewById(R.id.exercise\u manage\u name\u TextView);
exerciseDurationTextView=(TextView)view.findViewById(R.id.exercise\u manage\u duration\u TextView);
exerciseTimesRemainingTextView=(TextView)view.findViewById(R.id.exercise\u manage\u times\u remaining);
exerciseItemIcon=(ImageView)view.findViewById(R.id.exercise\u manage\u item\u icon);
deleteImageView=(ImageView)view.findViewById(R.id.delete_练习_按钮);
deleteImageView.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
单击listener.onItemClick(getAdapterPosition(),v);
}
}
public void setOnItemClickListener(ClickListener ClickListener){
ExerciseManageAdapter.clickListener=clickListener;
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
@凌驾
public int getItemCount(){
return exerciseArrayList.size();
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.exercise\u manage\u item\u row,parent,false);
返回新的ExerciseViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终RecyclerView.ViewHolder,最终整型位置){
ExerciseViewHolder ExerciseViewHolder=(ExerciseViewHolder)holder;
exerciseNameTextView.setText(exerciseArrayList.get(position).getNameOfExercis
notifyItemRemoved(position);
notifyItemRangeChanged(position, mData.size());